2016년 9월 1일 목요일

2)ActionFighter 와 이미지 드로잉


가장 먼저 비트맵월드에서 가장 중요한 ActinFighter(AF)들을 살펴보겠습니다.


AF PaperCharacter를 상속받아 만든 블루프린트 클래스입니다.


AF는 아주 많은 걸 구현합니다. 하지만 가장 먼저 외부적으로 나타나는 이미지의 변화를 어떻게 구현하는지 소개하겠습니다.



-      캐릭터 플립북



우선 캐릭터의 플립북을 변화시키는 동작을 살펴보겠습니다.

2D 캐릭터는 3D캐릭터와 달리 애니메이션을 저장시켜 하나의 모델을 이동시킬 수 없습니다. 사실 그런 식으로 쓸 수도 있지만 전 별로 마음에 들지 않더군요. 비트맵월드의 AF는 각각의 모션 하나하나 각자의 플립북이 있습니다.



이미지를 그리고 플립북을 만드는 것까진 괜찮습니다. 하지만 이걸 어떻게 AF와 연결할까요?

AF Sprite컴포넌트에 해당 플립북을 대입시키면 됩니다.


이런 식으로.



하지만 이게 그렇게 간단하게 생각할 문제가 아닙니다! 현재는 비트 하나뿐이지만 캐릭터 하나만으로 게임을 완성시킬 순 없습니다. 다양한 캐릭터는 각자 독자적인 이미지를 가지고 있을 겁니다. 그리고 다양한 상황에서 이미지가 바뀌게 될 겁니다.

이렇게 하나하나 플립북을 대입시키기보단 AF의 플립북을 변화시키는 것을 전문적으로 하는 컴포넌트를 만들고 이 컴포넌트가 가진 함수를 통해 AF는 각자 자기가 가지고 있는 플립북 데이터를 불러와 플립북을 변화시키는 편이 효율적일거라 생각했습니다.

그를 위해 필요한 것들이 있습니다.



FlipbookMotionGuide







플립북모션가이드는 AF가 가질 수 있는 모든 모션(플립북)에 대한 열거형입니다.
각각의 AF들은 이 열거형에 맞는 모션에 따른 플립북 값을 가지고 있습니다.
 















AFflipbookComponent




AF의 플립북을 변화시키기 위해 만든 플립북 변화 컴포넌트입니다.


아주 복잡해보이지만 컴포넌트의 이 함수를 통해 AF는 자신이 가진 플립북 값을 간단하게 불러와 플립북을 바꿀 수 있습니다. 최소한 이 복잡한 걸 몇 번이고 반복해서 만들지 않아도 됩니다.

결과적으로 AF는 자신의 모션 플립북 변수값을 변경하는 것만으로 얼마든지 다른 캐릭터를 만들어낼 수 있게 됩니다.
물론 그 리소스는 하나하나 그려야겠지만요. 시무륵
-      ActionMap


해당 장면엔 현재 연출 할 수 있는 이미지가 거의 다 나타나 있습니다.

보시는 것처럼 비트맵월드는 캐릭터의 주변에 원형의 인터페이스인 ActionMap을 가지고 있습니다.


액션맵은 6개의 방향에 슬롯을 가지고 있고 각 방향마다 상황에 맞게 4가지 타입의 이미지를 그릴 수 있어야 합니다.
또한 각 타입의 슬롯들은 서로 겹쳐져서도 그려질 수 있어야 하고 다수가 한번에 그려질 수 도 있어야 합니다.








이제 슬롯을 그리는 방법을 구현할 차례입니다.

슬롯의 구현은 AF안에 집중되어 있습니다. 사실대로 말하면 캐릭터 플립북 변화도 AF안에 있었지만 나중에 컴포넌트의 존재를 알게 되어서 따로 분리시켰습니다. 슬롯의 구현도 분리시키는게 좋지 않을까생각하는데 실행으로 옮기진 않네요.





어찌되었든 슬롯을 구현은 매우 동적으로 이루어집니다. 슬롯은 필요한 때에 새로운 페이퍼 스프라이트 컴포넌트로써 생성되어 그려졌다가 다시 파괴합니다. 이로써 다양한 슬롯들을 자유롭게 그릴 수 있게 됩니다.



CreateSlot

AF의 슬롯을 만드는 함수는 각 타입마다 개별적으로 만들어 각각의 슬롯을 저장하는 배열에 저장하게 됩니다.


CreateSlot함수는 매개변수로 받아들인 슬롯정보값을 분석해 필요한 슬롯의 숫자를 계산한 후 새로운 페이퍼 스프라이트 컴포넌트를 만든 후(예를 들어 123 값을 받으면 3개의 슬롯을 만들어냅니다.)  actionMap에 붙입니다. 이로써 actionMap위에 해당 슬롯이 그려질 수 있게 합니다.



DrawSlot

슬롯을 그리는 것은 위에서 저장한 슬롯셋에 동일한 슬롯정보값을 이용해 해당 위치에 맞는 슬롯 리소스를 컴포넌트에 대입시킵니다. 이 중 충전시간이 그려지는 nextSlot의 경우 현재 충전량을 가져와 해당 충전량에 맞는 리소스를 그립니다.



ClearSlotSet

슬롯이 필요한 상황이 끝나게 되면 해당 슬롯정보들을 전부 삭제하고 초기화 합니다. 초기화는 모든 슬롯타입이 한번에 이루어집니다.





위의 함수들을 이용해 AF는 게임에 필요한 이미지 드로잉을 구현하게 됩니다.


다음엔 AF가 어떻게 게임 행동을 구현하는지 알아보겠습니다.


댓글 없음:

댓글 쓰기