Today I Learned

[TIL][Unity] 24.04.16 내일배움캠프 게임개발 종합반 2주차

twotop6357 2024. 4. 16. 19:49

내일배움캠프 게임개발 종합반 2주차

풍선 지키기

2주차에서는 위와 같이 마우스 커서를 따라다니는 원형 방패를 이용해 반짝이는 풍선을 낙하물로부터 보호하는 게임을 만드는 실습을 진행하였다. 

2주차 실습은 주로 1주차 실습에서 다루었던 기능들을 다시 복습하는 것에 집중하였다.

 

어제 작성한 TIL에 등장했던 모든 기능이 재등장하였다.

다시 한번 짚어보면,

 

함수의 지연 호출, 일정 간격 반복 호출

//GameManager.cs
void Start()
{
    Time.timeScale = 1.0f;
    InvokeRepeating("MakeSquare", 0f, 1f);
}
//
// (중략)
//
public void GameOver()
{
	// (중략)
    Invoke("TimeStop", 0.5f);
    // (중략)
}

 

1주차에서 코드에 직접 사용된 함수는 InvokeRepeating 함수 뿐이였으나 2주차에서는 Invoke 함수 또한 사용하였다.

각각 낙하물을 생성, 게임오버 시 게임을 일시 정지하는 기능을 가진다.

각 함수를 되짚어보면

InvokeRepeating("함수이름", firstDelay, repeatDelay);

 

''함수이름' 함수firstDelay 후repeatDelay 간격으로 반복 호출한다.' 라는 의미이다.

firstDelay, repeatDelay의 자료형은 float형이다.

firstDelay와 repeatDelay가 2.0f라면 2초 후에 2초 간격으로 '함수이름' 함수가 반복 호출된다.

Invoke("함수이름", delay);

 

''함수이름' 함수delay 후에 호출한다.' 라는 의미이다.

앞서 언급했듯이 delay의 자료형은 float형이다.

 

게임 오브젝트의 동적 생성

//GameManager.cs
public GameObject square;
void MakeSquare()
{
    Instantiate(square);
}

 

1주차 TIL에 작성한 코드와 완벽히 똑같은 모습이다. 기능도 동일하다.

한 가지 주의할 점은 Unity의 GameManager의 Inspector에서 square에 프리팹화 한 게임 오브젝트반드시 넣어주어야 한다.

그렇지 않으면 오류 발생.

 

숙제 -  떨어지는 장애물 없애기

해당 실습을 진행하며 동적 생성한 낙하물이 삭제되는 로직은 사용하지 않았다.

이 경우 게임의 시간이 지날수록 화면에 표시되지 않는 부분에서 동적 생성된 낙하물은 끝없이 낙하하게 된다.

//Square.cs
void Update()
{
    if (transform.position.y < -6.0f)
    {
        Destroy(gameObject);
    }
}

 

Square.cs의 Update 함수에 해당 조건문을 기입하면 된다.

조건문을 해석하자면

'동적 생성된 낙하물의 y좌표가 -6보다 작으면 gameObject를 삭제한다.' 라는 의미이다.

Update 함수에 적용하였기에 이 조건문은 프레임 단위로 반복 수행되며 y좌표가 -6보다 작아지는 순간 해당 오브젝트는 삭제되는 것이다.

 

이렇게 간단한 로직으로 불필요한 동작을 수행하는 오브젝트를 게임에서 삭제하여 게임의 전반적인 성능 향상에 도움을 줄 수 있다.

 

24.04.16 Today I Learned