본문 바로가기

로그라이크

모든 것의 시작..주인공 만들기

게임에 등장하는 것들에는 무엇이 있을까요? 먼저 주인공과 몬스터가 있겠고, 퀘스트를 주거나 주인공을 도와 같이 싸우는 npc, 그 밖의 나무, 벽, 바위, 문, 보물 상자 등등의 다양한 것들이 있을 수 있습니다. 이런 종류의 것들을 지금 부터 '게임 내 오브젝트', 그냥 간단하게 '오브젝트'라고 부르도록 하겠습니다. 그리고 이번 장에서는 이 게임의 핵심이 되는 주인공(Player) 오브젝트를 만들어 보겠습니다.


주인공(Player) 클래스 데이터 및 오퍼레이션 정의 


먼저 주인공의 기본속성 부터 생각해 보도록하죠.

 - 위치 : 타일 기반 2D 게임이므로 x, y 축에 대해 2차원 좌표를 가지면 됩니다.


지금은 주인공에겐 아무런 기능이 없습니다. 단지 화면에 표시 되기만 하면 되죠. 그래서 현재로는 표시 되는 좌표만으로 충분합니다. 지금은 아무것도 할 줄 모르는 주인공에게 점점 기능을 붙여나가 험난한 던젼을 무사히 탐험할 수 있도록 하는 것이 우리의 목표입니다. 주인공을 나타내는 클래스 이름을 'Player'라고 하겠습니다. 클래스를 만들고 위치를 표시하는 변수를 추가해 줍니다.

'Player' 객체는 앞으로 게임을 진행하는 핵심 데이터들을 담고 있을 예정입니다.그래서 전역적인 접근이 가능하고, 게임이 구동되는 시점부터 종료 되는 시점까지 존재 할수 있어야 합니다. 이런 조건을 만족하는 것은 전역 변수나 싱글톤인데 접근 제한 및 생명 주기를 관리하기에 적합한 디자인 패턴은 싱글톤 입니다. Player를 싱글톤으로 사용할 수 있게 코드를 추가해 줍니다.

우선은 작업이 완료 되었습니다. 이제는 우리의 주인공을 화면에 그려 보도록 하겠습니다.


주인공을 화면에 표시하기

위에서 만든 Player 클래스는 Unity와는 아무런 상관이 없는 단순한 C# 클래스일 뿐입니다. 심지어 MonoBehaviour 도 상속 받지 않았으니 Player만으로는 Unity 게임 씬 추가 할수도 없습니다. 이제 부터는 이 데이터 클래스의 뷰 역할을 할 MonoBehaviour클래스를 상속 받은 클래스를 추가할 예정입니다. 처음부터 MonoBehaviour를 상속받아 만들지 않고 뷰 클래스를 따로 분리하는 이유는 나중에 엔진을 바꾼다거나 뷰를 좀 더 고급스럽게 바꿀때 프로그램 전체를 뜯어 고치는 것이 아니라 뷰를 처리하는 부분만 쉽게 교체 할수 있도록 하기 위함입니다.


화면에 나타날 뷰는 unity 4.3 이후 버젼에서 추가되는 UGUI를 이용하도록 하겠습니다. 먼저 Hierachy 탭에 Text 오브젝트를 추가 합니다(Hierachy 탭 우클릭 > UI > Text). 그러면 Canvas와 EventSystem이 자동으로 생성되는 것을 볼수 있습니다. Canvas하위에 생성되는 게임 오브젝트는 RectTransform이라는 다른 형식의 Transform을 가지게 되는데 우리가 할 작업에는 중요한 영항을 미치지 않으므로 지금은 무시하도록 하겠습니다. Text 오브젝트의 이름을 PlayerView로 변경 합니다.


Project 탭에 PlayerView라는 스크립트를 추가하고 아래과 같이 작성합니다.


화면에서 주인공 확인하기

Unity 플레이 버튼을 클릭하여 프로그램을 실행하면 다음과 같이 녹색 '@'가 나온다. 앞으로 이 심볼이 주인공이라고 하겠습니다.


유익한 글이었다면 공감(❤) 버튼 꾹!! 추가 문의 사항은 댓글로!!