본문 바로가기
유니티5 독학 & 게임 제작

유니티5 독학하기 그 60번째 걸음-게임오버 이벤트와 다시 시작하기 구현

by 인터넷떠돌이 2018. 7. 29.
반응형

안녕하세요?


이번 포스팅에서는 유니티5.X와 함께하는 C# 첫걸음 이란 책의 챕터10을 하면서, 어떻게 하면 게임오버 이벤트를 작성할 수 있느냐 하며, 어떻게 하면 다시 시작하기를 구현할 수 있는지에 대해서 실습을 해보고, 그 내용을 포스팅하고자 합니다.



이번 작업을 위해서 이미 만들어져 있는 유니티 프로젝트 파일을 준비하도록 합니다. 일단 이번 경우에는 미리 만들어져 있는 작업물을 가지고 왔는데, 앞으로 작업을 하면 아마 제가 직접 만들어야 할 것으로 생각이 됩니다.



다음으로는 모든 구성요소를 가지고 오도록 합니다. 여기서는 프리펩과 스프라이트가 이미 제작이 되어 있는 것을 볼 수 있습니다.



이제 Prefabs라는 폴더 안을 보면, 여기서는 KillTrigger라는 프리펩이 있는 것을 볼 수 있습니다.



그대로  드레그 앤 드롭으로 계층뷰에 KillTrigger라는 프리펩을 끌어다 놓으면 훌륭한 게임오버를 위한 게임 오브젝트가 생성됩니다.




추가를 하고 나니 빨간색 사각형이 나오는데, 당연하다면 당연하게도 이게 카메라 뷰에 그대로 빨간색으로 나오게 됩니다. 그래서 이번에는 카메라의 밖에 위치 하도록 합니다.



이 KillTrigger게임 오브젝트를 선택하고 나면, 이게 무슨 방법으로 만들어 졌는지 한번 보았는데, 여기서는 Box Collider 2D라는 컴포넌트가 있으며, 다음으로는 이 모양을 만드는 데 사용된 것으로 보이는 Sprite Renderer가 있는 것을 볼 수 있습니다. 이를 기억해 두었다가 나중에 써 먹어야 겠습니다.



그리고 이렇게만 있으면 안되기 때문에 일단 C# 스크립트를 만들어 줍니다. 이 스크립트의 이름은 KillTrigger.cs로 이제 코딩에 들어갈 차례입니다.



먼저 위에서 나온 OnTriggerEnter2D(Collider2D 변수)라는 함수는 BoxCollider2D에 부딪치기만 하면 바로 호출이 되는 함수입니다. 여기서는 Debug.Log로 일단 콘솔창에 메소드만 나오도록 만들어 줍니다.




이렇게 해서 KillTrigger라는 게임 오브젝트에 일단 KillTrigger라는 스크립트를 붙여 주도록 합니다.



그 다음으로는 플레이어 게임 오브젝트를 선택하도록 합니다.



그리고 가장 상위에 있는 Tag항목이 있는 것을 볼 수 있는데, 이 항목을 Player라고 지정을 해 주도록 합니다.



이렇게 작업을 하고 나서 플레이어 캐릭터가 구덩이에 빠지자 그대로 게임오버 메세지가 나오는 것을 볼 수 있습니다. 물론 제가 원하는 것은 이런 메세지만 뜨는 것이 아니기 때문에, 추가로 작업에 들어가도록 합니다.



이제 PlayerController.cs에 가서, Kill()이라는 사용자 정의 함수를 만들어 주도록 합니다. 여기서는 당연하게도 GameManager에서 있는 GameOver()라는 사용자 정의 함수를 실행 시키도록 하고, 다음으로는 animator의 상태에서 isAlive를 false로 즉 죽었다는 상태로 만들어 주도록 해야 합니다.



그리고 이번 PlayerController.cs오 싱클톤 혹은 싱글턴으로 만들도록 해 줍니다. 만드는 방법은 간단하게도 가장 상위에 밑줄친 instance선언을 해주고, Awake()에 instance=this; 라고 설정을 해주도록 합니다.



다음으로는 KillTrigger.cs로 가서, 위 스크린샷과 같은 코드를 추가해 주도록 하는데, 이렇게 하는 이유는 바로 구덩이로 떨어져서 게임 오브젝트에 부딪칠 경우 Kill()이란 PlayerControlller.cs에 있는 메소드가 실행되도록 하기 위해서 입니다.




이제 다시 시작을 했을 때, 처음 위치로 시작을 하도록 만들어야 합니다. 이렇게 하기 위해서는 먼저 private라는 Vector3형식의 좌표를 저장하는 변수를 선언하도록 합니다. 그리고 Awake()에서는 바로 시작하자 마자 플레이어 캐릭터가 서 있는 위치를 이 변수의 값으로 지정을 하고, 이제 Start()함수를 StartGame()이라고 바꾸어 놓고, 게임이 시작하면 this라고 플레이어 게임 오브젝트의 위치를 변수의 값으로 하는 것입니다.



다음으로는 GameManager.cs에 있는 StartGame()에서 위 스크린샷과 같은 코드를 한줄 추가해 주도록 합니다. 이렇게 하면 게임을 시작하는 하는 상태로 만들어 주는 것과 동시에 PlayerController.cs에 있는 메소드를 실행시켜서 플레이어 캐릭터의 위치도 지정하도록 합니다.



그런데 무슨 이유에서 인지 에러가 발생했습니다. 이게 왜 문제인가 했더니 Protection Level이라고 해서 접근성 문제가 발생한 것이였습니다.



알고 보았더니 PlayerController.cs에서 public 이라는 선언을 해주지 않아서 생긴 문제였습니다. 제 생각에는 그냥 해주면 알아서 public으로 인식을 할 줄 알았더니, 그게 아니라 public이라고 일일히 지정을 해 주어야만 하는 문제가 있었습니다.



이제 완성된 모습입니다. 제가 게임시작버튼인 S키를 누르면, 계속해서 초기 위치로 돌아가는 것을 볼 수 있는데, 이것으로 챕터 10의 내용은 완료가 되었습니다. 이제 계속해서 작업을 진행해서 뭐하나 쓸만한 물건이 나오도록 해 보겠습니다. 그런 이것으로 이번 포스팅을 마치겠습니다.

반응형