Unity-미니 프로젝트#3

이준호·2023년 11월 5일
0
post-custom-banner

미니 프로젝트 3일차


미니 프로젝트에서 내가 맡았던 일인 게임의 종료조건을 구현하기로 했다.

게임의 종료 조건 2가지

  • 타이머 30초가 다 지나버린 경우
  • 조커를 페어로 뽑아버린 경우

               일단 게임 종료시 나올 패널을 만들었다.

               팀원의 에셋을 이용하여 만들어 보았다.


  • 타이머가 30초가 다 지나버린 경우
    게임 타이머를 가지고 업데이트에서 계속 시간을 감소시키는 변수를 그대로 가져와서 따로 GameOver()함수를 만들어 게임의 타이머가 0이 되면 Time.timeScale = 0;으로 만들어끝내기로 했다.
void GameOver()

{

       if (gameTime <= 0)

    {

            gameoverPanel.SetActive(true); // 숨겨져있던 게임오버의 판넬을 보여주게 한다.

            Time.timeScale = 0;    // 게임을 멈춘다. 

    }

}

GameOver()를 Update()에서 돌려서 충족시에 게임을 멈추고 게임오버 판넬을 보여주도록 하였다.

  • 조커를 페어로 맞춘 경우
    다른 팀원이 만들어둔 조커가 페어가 됐을시의 코드부분으로 가서
	gameoverPanel.SetActive(ture);
    Time.timeScale = 0;

처리를 하여 동일하게 멈추게 하고 판넬을 보여주게 하였다.


판넬에 보이는 RETRY 버튼과 TITLE버튼은 각각 버튼 UI로 만들어 판넬의 자식 오브젝트로 두고
SceneManager.sc를 만들어 그 스크립트 안에 LoadScene기능을 모아두었다.

그 기능들을 RETRY Button과 TITLE Button의 Event에 각각의 Event를 적용하여 각자 상황에 맞는
Scene으로 Load하도록 만들었다.

그렇게 몇번의 테스트를 하는 도중에 오류를 하나 발견하였다.

게임을 RETRY하여 다시 시작하면 GameManager가 두 개가 생기고 하나에는 public으로 GameManager스크립트 안에 선언해둔 gameoverPanel이 자꾸 빠진다는 것 이었다.

계속해서 실행과 중지를 해가며 비교를 해보고 스크립트를 확인했을 때 어느점이 이상한지는 알게 되었다.

팀원이 GameManager를 따로 싱글톤 스크립트를 작성해 lock을 걸고 DontDestroyOnLoad하여 상속 시키는 방식으로 사용을 하였는데

저 DontDestroyOnLoad로 인해서 GameManager가 씬이 재시작 될 때 사라지지 않고 두개가 생기고 자꾸 오류가 나는 것 이었다.

그 뒤로는 계속 고민을 하였으나 DontDestroyOnLoad라는 기능이나 lock을 거는 것, 싱글톤 스크립트를 작성해 다른 스크립트에 상속시켜 사용하는 것, 아직 초보인 나는 그런 기능을 몰랐기에 튜터님의 도움을 받아서 해결방법을 알게 되었다.

  • GameManager가 두 개가 되었을 때, 하나의 gameManager를 파괴하는 코드를 추가
  • Scene이 총 2개(Title,MainGame)으로 나뉘어 있는데 MainGame Scene에있는 gameManager를 없애고 DontDestroyOnLoad가 걸려있는 gameManager를 Title Scene에서 시작할 때 부터 그대로 MainGame Scene으로 끌고 다니는 것

우리는 2번의 방법을 사용하기로 했지만 그 전에 코드들을 깔끔하게 하기위해 gameManager에 있던 코드들을

MainGame이라는 스크립트를 만들어(main Scene에서 main에서 작동하는 게임기능만 빼서 관리하기위해)

각 각의 기능에 맞게 분배를 하고 gameManager를 TITLE로 옮겨 가져와서 오류를 해결하는데 성공하였다.

처음보는 기능들이 많아서 상당히 어려웠지만 그래도 많이 배웠다. 전부 이해는 못하지만 그래도 이 상황과 경우를 통해서 다음에 볼 때는 좀 더 빠르게 이해를 하거나 해결방법을 생각할 수 있게 되는 좋은 시간이었다.

항상 도움을 주는 튜터님과 팀원들에게 감사한다.

profile
No Easy Day
post-custom-banner

0개의 댓글