오늘은!!! 드디어!! 토끼들이 생명을 얻었어!!
기존에는 토끼들이 하드코딩된 경로만을 따라 움직였지만, 이제 드디어 토끼가 자기 브레인을 가지고 의지대로 움직일 수 있게 되었어.
참, 아직 토끼들의 모션 등은 조정 중에 있으니 오늘은 토끼 움직임의 자연스러움이나 현실성보다는 토끼들이 이렇게 행동하는구나 하는 부분에 초점을 두고 봐줬으면 좋겠어.
아무래도 많은 토끼들을 화면에 풀어놓는 게 처음이다 보니 개선점도 많이 보이고, 악세서리 모션 연동 부분도 개발 조정이 덜 된 부분이 있어서 수정이 필요하겠더라.
토끼는 기본적으로 3가지의 할일을 가져.
먼저 1) 빈 밭이 있으면 밭에 당근을 심고, 2) 당근이 다 자란 밭이 있으면 당근을 수확하며, 3) 가지고 있는 당근이 있으면 창고로 가서 가지고 있는 당근을 저장해.
이 세 가지가 전부 해결되어 할 일이 없을 경우, 토끼는 자신이 속한 집으로 가서 휴식을 취해.
물론 이게 토끼 활동의 전부는 아니야 - 토끼는 이따금씩 동아리 활동을 할 수 있어. 동아리는 당근(1차 재화)을 멘탈(2차 재화)로 바꿔주는 기관인데, 이는 자동으로 진행되는 당근 수확 시스템과 달리 플레이어가 직접 동아리를 가동하는 방식으로 이루어져.
플레이어가 동아리를 가동하면 소속 토끼들은 현재 진행 중인 일을 마무리하고 다음 우선순위로 동아리 활동을 선택해. 그리고 동아리에 소속 토끼들이 전부 모이면, 비로소 동아리 활동이 시작돼.
동아리 활동의 종료도 자동으로 이루어지지 않고 플레이어가 컨펌을 해줘야 하는 방식이어서, 가동만 시켜두고 마냥 방치시켜둘수는 없도록 했어.
토끼마을 세계는 험난한 야생과 같아. 시도때도 없이 당근을 심을 농장과 수확할 농장이 생기고, 갑자기 동아리 활동이 시작되기도 하지. 이뿐만 아니라, 당근을 수확하러 가는 도중 당근 농장이 철거되어 버릴 수도 있고, 당근을 저장하러 가던 중 다른 토끼에 의해 당근 창고가 꽉 차버릴 수도 있으며, 동아리 활동을 하는 도중 갑자기 활동이 취소되어버릴 수도 있어.
이런 모든 상황에 대비할 수 있도록, 토끼들의 행동 양식은 FSM(유한 상태 기계), 그 중에서도 HSFM(계층 구조를 가지는 FSM)으로 구현했어. 각 상태는 끝날 때 자신의 행동을 정리하게 되어 있으며, 부모의 상태가 종료될 때는 자식을 먼저 정리한 후 자신을 정리해. 이 덕분에 토끼는 어떤 상태를 진행중이었던간에 상관없이 하던 일을 잘 마무리하고 다음 활동을 진행할 수 있어.
또 지금은 많은 상태들이 있는데, 각 상태마다 다음 상태로 전이될 조건을 일일히 구현한다면 (예외처리까지 감안해서) 너무 많은 경우의 수를 구현하는 게 필요해지겠지? 그래서 나는 현재 상태에 제약을 받지 않고 다음 활동을 선택할 수 있게끔 BT(행동 트리)의 행동 선택 방식에 영감을 얻어 토끼의 다음 상태를 정하는 활동을 구현했어. 덕분에 토끼는 활동이 끝나면 현재의 상태가 무엇이었던간에 관계 없이 유연하게 다음에 할 행동을 선택할 수 있어.
이렇게 토끼의 AI를 구현함으로써 안전성과 유연성 두 마리 토끼를 잡은 설계를 할 수 있었어. 실제로 여러 테스트를 해본 결과, 대부분의 예외 상황에서 의도한 대로 대응하는 걸 볼 수 있었어.
다음에는 UI 구현하고 돌아올게. AI로 만든 UI(https://gall.dcinside.com/m/game_dev/151358)에 생명을 입히는 과정이라 기대가 된다 ㅋㅋ
그럼 다음에 봐!
- AI로 만든 UI들
ㄱhttps://gall.dcinside.com/mgallery/board/view?id=game_dev&no=150280
이 일이 있고 난 다음에 만든 UI들
홈 UI 기획
인게임 UI 기획
메뉴 UI 기획
거의 챗GPT 일일 사용량 한계까지 써가면서 만들었는데 개인적으로는 엄청 만족스러웠음
이정도면 UI로 GOTY 가능?
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.