2019. 7. 27. 18:36ㆍ인 게임 상태 전환 구현
인 게임에서 Update 함수를 사용하여 각 상태를 하드 코딩으로 구현하자니 차 후에 유지 보수가 막막해서 흐름과 상태를 객체화하여 구현하는 방법이 없는지 고민하다가 읽은 서적에서 상태 패턴과 FSM을 생각하게 되었고 활용해보고자 했습니다. 이 스크립트들은 턴제 RPG를 기준으로 설계를 했습니다.
인 게임 흐름 분석
프로젝트를 제작할 때 다음과 같은 흐름을 가진 게임입니다.
1. 데이터를 구축하고 구축된 데이터를 바탕으로 캐릭터, 무기, 스킬, 스테이지, 적, 배경 등을 초기화합니다.
2. 스테이지에 설정된 옵션에 따라 캐릭터가 이동하거나 적이 이동하고 이동이 완료되면 전투가 이루어집니다.
3. 전투가 종료되었다면 다음과 같은 처리를 합니다.
---1. 적이 존재하면 다음 웨이브로 넘어갑니다.
---2. 웨이브가 종료되면 승리에 대한 결과창을 보여줍니다.
---3. 전투 중 아군 캐릭터가 모두 격파되면 패배에 대한 결과창을 보여줍니다.
흐름을 객체화시키기
인 게임 흐름 분석에서 흐름 객체를 추려봅니다.
1. 인 게임이 진행되는 동안 단 한 번만 초기화하면 됩니다. 게임 결과에 따라 다시 초기화해야되는 경우가 있지만 흐름 자체가 변하지는 않습니다. 그렇기 때문에 이 부분만 객체화를 시킬 수 있습니다.
2. 캐릭터 혹은 적이 이동하는데 스테이지 테이블에 설정된 옵션에 따라서 이동합니다. 이동이라는 흐름을 객체화시키고 스테이지 테이블에 설정된 옵션에 따라서 이동 처리를 하면 됩니다.
3. 이동이 완료되면 전투가 이루어집니다. 이 경우 이동의 완료란 이동과 전투의 파이브 개념으로 볼 수 있으며, 전투라는 흐름을 객체화시키면 됩니다.
4. 전투 종료에 대해서 적이 존재하면 웨이브로 넘어가는 것은 전투 흐름 객체에서 이동 흐름 객체로 넘어가는 것으로 볼 수 있습니다. 즉 이동 -> 전투 -> 이동 -> 전투 이런 식의 흐름을 가집니다.
5. 웨이브가 종료되거나 아군 캐릭터가 모두 격파되는 것은 결과를 의미합니다. 따라서 결과라는 흐름을 객체화시켜서 승리 혹은 패배에 따라서 팝업 창을 보여주면 됩니다.
흐름 객체 안에 FSM을 추상화하기
유한 상태 기계의 약자로 하나의 객체에 여러 가지 상태가 존재하는데 상태는 반드시 하나의 상태만 가지고 처리하며 조건에 따라 상태가 전환되는 모델을 의미합니다. 흐름 객체를 설계하면서 흐름 객체가 가지는 상태를 설계하다 보니 3가지 상태를 추상하게 되었습니다.
Start |
Update 전에 사전에 처리할 상태 |
|
Update |
지속적으로 갱신하는 상태 |
|
End |
상태의 행동이 끝났으며 끝내기 전에 처리할 상태 |
인 게임 초기화와 인 게임 흐름의 초기화는 다릅니다.
인 게임 초기화는 데이터가 구축되지 않는 상태에서 데이터를 구축하는 것을 의미합니다.
인 게임 흐름의 초기화는 인 게임 초기화 이후 흐름에서 필요한 초기화를 하는 것을 의미합니다.
'인 게임 상태 전환 구현 ' 카테고리의 다른 글
클래스 구조 (0) | 2019.07.27 |
---|---|
인 게임 흐름 객체화하기 (0) | 2019.07.27 |
FSM 구현하기 (0) | 2019.07.27 |
InGameView 구현하기 (0) | 2019.07.27 |