본문 바로가기

유니티

13조 팀 프로젝트 - 1

오늘부터 팀 프로젝트를 진행할것이다.

 

팀원들과 역할을 배분하여 간단한 미니게임 4개를 만들고

 

깃허브를 활용하여 SelectScene을 통해 각 게임으로 연결되게 만들것이다.

강아지가 밥을 쏴서 고양이를 물리치는 일종의 슈팅게임을 담당하게 되었다.

 

1~4주동안 들은 사전 강의와 강의에서 사용한 이미지를 활용하여 슈팅게임을 하나 만들어보자

 

게임씬과 스타트씬을 적당히 꾸며주고 코딩 하는 부분을 집중적으로 공부할까 한다.

 

 

 

먼저, 강아지가 쏘는 탄환의 규칙을 살펴보자

 

1. 탄환은 반복생성 되어야한다.

2. 탄환이 생성되는 위치는 강아지의 머리 바로 위

3. 탄환은 위로 움직어야한다.

4. 탄환은 고양이에 맞으면 피격되며 파괴되어야한다.

 

당장 실행 가능한것은 반복생성과 위로 움직이는 로직이다.

 

void Update()
{
    transform.position += Vector3.up * 0.5f;
}

탄환에 적용시킬 스크립트를 생성해주고 Update 함수에 위칫값을 변경 시켜주는 로직을 입력해준다.

 

transform의 position을 + 해줄것이다.

Ventor3.up 위로 * 0.5f 만큼

 

이대로 적용시키면 너무 빠르게 올라갔던 경험이 있으므로 GameManager를 통해 프레임을 고정시켜주도록 하자.

 

void Start()
{
    Time.timeScale = 1.0f;
    Application.targetFrameRate = 60;
}

 

나중에 게임 시작할 때 다시 게임이 움직이게 하는 코드도 지금 미리 추가해주자

 

1. 탄환은 일정 간격으로 반복생성 되어야한다.

2. 탄환이 생성되는 위치는 강아지의 머리 바로 위

3. 탄환은 위로 움직어야한다.

4. 탄환은 고양이에 맞으면 피격되며 파괴되어야한다.

 

이제 탄환이 강아지 머리 위에서 반복 생성되게 해보자.

 

void MakeFood()
{
    float x = transform.position.x;
    float y = transform.position.y + 0.6f;
    Instantiate(Bullet, new Vector2(x, y), Quaternion.identity);
}

 

먼저 함수를 만들어서 강아지의 x,y값을 받아오고, 무한 반복되는 로직을 짜보았다.

강아지 머리위에서 쏴야하기 때문에 y값에 0.6정도 더해주었고, 총알의 회전은 구현하지 않을것이기에

Quaternion.indentity를 통해 회전을 0으로 만들었다.

 

void Start()
{
    InvokeRepeating("MakeFood", 0.0f, 0.2f);
}

 

스타트 함수에 써주어야하는 이유는 1회만 이 코드를 실행 시킬것이기 떄문이다.

Update에 넣고 사용시 매 프레임마다 해당 코드가 실행되며 밥이 무한 증식할것이다.

 

InvokeRepeating은 일정 간격으로 반복한다는 뜻이며, (매서드명, 시작지연시간, 반복 텀); 이라고 보면 된다.

 

if (transform.position.y > 5.2f)
{
    Destroy(gameObject);
}

다시 탄환 스크립트로 돌아와서 유니티에서 없어지지 않고 남아있는 오브젝트들을 삭제해주기 위해 화면 밖으로 벗어나면 삭제하는 코드를 입력해주면

 

 

 

총알이 잘 나오고, 유니티상에서도 정상적으로 파괴가 되는 모습이다.