Unity 3D/닷지

닷지 03) GameManager, 기존 오브젝트에 기능 추가, UI

ybbro 2023. 3. 6. 17:12

게임의 전반적인 페이즈를 생각해보겠습니다.

보통 미니 게임은 아주 단순하게 표현하면 아래와 같은 페이즈로 이루어져 있습니다.

 

                                                                                   ↓ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㄱ

게임 실행 후 타이틀 화면 > 게임 시작 > 게임 중 > 게임 오버 > 재시작

 

페이즈를 나눠주기 위해 모든 스크립트에서 동일한 값을 가지고 공유하는 변수가 필요합니다.

이런 변수들을 모아두고 관리하고 사용하기 쉽게 static 클래스를 가진 스크립트를 하나 생성하겠습니다.

C# 스크립트를 하나 생성하고 이름을 GameManger 로 붙여주면 다른 C# 스크립트와는 다르게 톱니바퀴 모양의 아이콘으로 변합니다.

GameManager를 더블클릭하고 아래와 같이 코드를 작성하면 게임 페이즈를 bool 변수 하나로 구분할 수 있습니다.

주석에 설명한 대로 태그도 여기서 관리하겠습니다.

추가로, 태그를 변경하더라도 스크립트에서 사용하는 것은 여기서 하나만 바꿔주면 되니 변경점 적용도 수월합니다.

페이즈를 구분함에 따라 이전에 만든 오브젝트들에도 각각 수행할 역할이 추가됩니다.

 

플레이어 > 게임 실행 직후 : 비활성화

               > 게임 시작/재시작 : 활성화 및  중앙으로 위치 초기화

게임 시작/재시작 버튼을 누르면 활성화 되는 부분은 버튼 기능으로 추가

 

총알 생성 포인트 > 게임 오버 시 발사된 총알을 오브젝트 풀로 다시 넣어주고 비활성화

총알 프리팹에 총알을 구분할 수 있는 태그 부여
게임 오버 시 태그를 이용하여 활성화된 총알 오브젝트를 1프레임 당 하나씩 찾아서 오브젝트 풀로 회수

 

총알 > 재시작 시 랜덤 속도로 초기화 > 재시작하고 생성될 때 활성화

기존의 Start()를 OnEnable()로 변경하여 활성화 될 때마다 랜덤 속도를 다시 부여
충돌 판정 시 플레이어와 닿으면 게임 오버 판정, 플레이어 비활성화 처리

 

6. UI

   생존 시간을 표시하는 텍스트 : 게임 실행 직후  > 비활성화

                                                    게임 시작          > 활성화, 생존 시간 초기화

                                                    게임 중              > 생존 시간을 카운트하여 텍스트 갱신

                                                    게임 오버           > 카운트 중단하여 직전 게임의 생존 시간 표시

                                                    게임 재시작       > 생존 시간 초기화

   

   버튼 : 누르면 게임 시작/재시작 (처음 누르면 버튼의 텍스트를 RETRY로 변경, 기능은 동일)

 

    1) Text - TextMeshPro

        (1) 오브젝트 생성 : 하이어라키 창 우클릭 > UI > Text - TextMeshPro

              프로젝트에서 처음으로 TMP를 생성한다면 아래와 같이 창이 뜨는데 위의 버튼만 Import

        생성하면 Canvas, 캔버스의 자식 오브젝트로 Text(TMP), 따로 Event System 이렇게 3개가 생성됩니다.

        (2)  텍스트를 화면 중앙 위쪽으로 위치 이동

               Text(TMP)의 인스펙터 창 > Rect Transform의 사각형 모양을 클릭 > Alt 키 누른 채 중앙 위 아이콘 클릭

 

               Text(TMP)의 인스펙터 창 > Alighment > 텍스트가 박스 중앙에 표시되도 정렬

               문자열이 텍스트를 표시하는 박스의 Width를 넘어도 줄바꿈 되지 않고 모두 표시되도록 아래와 같이 설정

    2) Button

        오브젝트 생성 : 하이어라키 창 우클릭 > UI > Button - TextMeshPro

이름 변경으로 정리

        버튼의 자식 오브젝트의 텍스트 글자를 "START"로 변경

게임 실행 전 화면

 

    3) C# 스크립트

        (1) Canvas의 컴포넌트로 추가할 스크립트 :자식 오브젝트 활성화/비활성화, 버튼 기능

두 줄은 같아보이지만 Components (해당 컴포넌트를 모두 찾아서 배열로 반환) 와 Component (처음 나오는 해당 컴포넌트)로 찾는 갯수가 다르다
버튼을 눌렀을 때 수행할 기능

              버튼의 기능을 담은 Game_Start()를 버튼의 On Click 이벤트에 연결시켜 주겠습니다.

              하이어라키 창의 버튼 클릭 > 인스펙터 창 > On Click() > + > None (Object) 클릭 > Scene 탭 >

              Canvas 오브젝트 선택 > No Function 클릭 > Canvas에 포함한 스크립트 명칭 > Game_Start()

 

        (2) 생존 시간을 표시하는 텍스트의 컴포넌트로 추가한 스크립트

 

추가로, 벽이랑 텍스트 색이 같아 시간이 잘 안보이니 벽만 회색 머터리얼을 넣어서 구분되게 하고

이렇게 닷지의 기본적인 틀이 완성되었습니다.