이번 장에서는 몬스터 오브젝트의 뷰를 만들 차례입니다. 몬스터도 플레이어 처럼 하나의 아스키 코드로 표현 됩니다. 몬스터의 알파벳 첫글자를 따서 'M'이라고 하도록 하죠. 잠깐 몬스터 뷰를 개발하기 전에 유니티의 '프리팹'이라는 것에 대해 잠깐 알아보고 가도록 하겠습니다.(이미 잘 알고 계신다면 그냥 넘어 가셔도 괜찮습니다)
프리팹?
유니티 게임 오브젝트를 인스턴스화 하는 방법은 두가지가 있습니다. 하나는 프로그래밍적으로 코드를 사용하여 인스턴스를 만드는 것이고, 다른 하나는 에디터상에서 미리 만들어진 프리팹을 로딩하는 것입니다. 프리팹을 사용 했을시 코드 상으로 최소 몇줄 이상 되어야 하는 코드들을 한줄로 줄일 수 있고, 런타임에 속성들을 변경하여 테스트 해볼 수 있습니다.
- 프리팹은 내부적으로 하나( 혹은 이상)의 게임 오브젝트 또는 컴포넌트가 시리얼라이즈 된 데이터 스트림입니다.
- 프리팹의 개념은 에디터에만 존재하며 프리팹의 수정은 유니티 빌드 시 일반 시리얼라이즈 스트림으로 저장됩니다.
- 프리팹이 인스턴스화 되어 게임 오브젝트화 되면 에디터에서는 해당 게임 오브젝트가 프리팹이었는지 오리지널 게임 오브젝트였는지에 대한 구분이 없습니다.
Resoruces - http://docs.unity3d.com/ScriptReference/Resources.html
- Assets 폴더 밑 어느 곳에라도 Resources 폴더를 만들고 asset들을 넣어두면 Resources.Load 함수를 이용하여 런타임에 해당 리소스를 로딩할 수 있습니다.
- 필자는 처음에 이 Resources 폴더를 어디에 두어야 할지 한참을 고민했었는데 그냥 Assets 밑에 아무곳에나 두어도 상관 없습니다.
그리하면 위와 같이 ObjectView는 파란색으로 변하고 Resources 폴더 밑에 프리팹이 생성되었습니다. 이게 전부 입니다. 'Hierarchy 탭에 있는 게임 오브젝트를 Project 탭으로 이동'하면 프리팹이 생성 됩니다. 이렇게 프리팹이 완성 되었습니다. 그럼 이제부터는 프리팹을 로딩하는 스크립트를 작성해 보도록 하겠습니다.
이제 프리팹을 로딩하는 함수를 작성해 보도록 하지요. 위에서 'Resources' 폴더에 들어 있는 asset은 Resources.Load 함수를 통해 로드 할수 있다고 이야기 했습니다.
위 Create 함수는 Resources 폴더에서 프리팹을 로드하여 인스턴스화 한 후, ObjectView 혹은 ObjectView를 상속 받은 클래스 객체를 리턴합니다. 우리가 프리팹으로 만들었던 ObjectView 게임 오브젝트는 사실 Text 외에는 아무런 정보도 가지고 있지 않습니다. 그래서 실제 컨트롤을 위해 ObjectView 클래스를 AddComponent함수를 통해 게임 오브젝트에 추가합니다.
이제 MonsterData 클래스에 뷰를 생성하는 부분을 추가 해봅시다.
MonsterData 클래스에 ObjectView 변수를 추가하고 생성자에서 표시될 텍스트와 컬러를 지정했습니다. 그리고 SetPosition 함수에서는 ObjectView의 좌표를 지정하는 부분을 추가하였습니다. 우리는 이미 이전 장에서 MonsterManager를 통해 몬스터 데이터를 생성하는 부분을 만들어 놓았으므로 플레이모드를 실행하게 되면 화면상에 플레이어를 나타내는 녹색 '@'과 몬스터를 나타내는 붉은색 'M'을 볼수 있습니다.
Player 클래스도 동일하게 ObjectView 변수를 추가하고, 생성자에서 텍스트와 컬러를 지정하며, SetPosition함수에서 ObjectView의 위치를 조정할 수 있도록 변경하도록 합니다.