들어가며
팀프 첫 개발일지입니다. 꾸준히 작성할 수 있도록 하겠습니다.
오늘 주제는 쉽지만 이런 쉬운 거 아니면 언제 블로그 적나 싶어 적습니다.
오늘 만들 것
이 게임은 마인크래프트, 체스 같이 격자모양으로 칸마다 나누어져 있는 타일 기반 게임입니다. 이때 플레이어의 조작을 받아 움직이는 것은 맵을 한 칸 한 칸 텀을 주며 움직이는데, 그 움직임 시스템을 개발할 것입니다.
만들기 시작
인풋시스템
아무래도 움직이려면 인풋이 필요하겠죠. 뉴 인풋시스템(뉴 아님 주의)을 이용해 만들어볼 것입니다.
추후 더 추가하겠지만 우선 무브먼트만 만들어서 WASD 입력만 받아오겠습니다.
이후 c#클래스로 추출 후, SO로 이벤트 형식으로 받아오는 방식으로 할 것입니다.
이런 식으로 받아오면 됩니다.
기존에는 이벤트가 아닌 프로퍼티를 통해 만들었지만 이번에는 인풋을 계속 받아올 필요가 없고, 한번 움직이고 나서, 도착 한 뒤 대기 상태에서만 받으면 되기 때문에 이벤트 형식으로 했습니다.
State 패턴 구현 (FSM)
이 게임은 한 오브젝트가 여러 가지 상태를 가질 수 있는 게임입니다.
VIVI is you 하면 플레이어, VIVI is Melt 하면 녹을 수 있는 상태.. 등등 무수히 많습니다.
그렇기 때문에 여러 가지 고민을 해봤지만 아직 저의 머리로는 몰라서
배웠던 StateMachine구조에서 현재 스테이트를 딕셔너리로 만들어서 관리하기로 했습니다.
한 번에 여러 가지 상태를 가질 수 있게 말이죠.
수업 때 배운 그대로 스테이트 스크립트를 작성합니다.
이후 StateMachine
왼쪽사진부터 설명하겠습니다.
모든 스테이트를 관리하는 딕셔너리, 현재 상태를 관리하는 딕셔너리.
그것들을 초기화해 주는 생성자, Inia을 통한 기본 세팅, AddState를 통한 스테이트 추가 코드입니다.
오른쪽사진
AddCurState를 통해 현재 스테이트 딕셔너리에 추가하며 Enter함수 실행
ExitCurState를 통해 현재 스테이트 딕셔너리에서 삭제하며 Exit함수 실행
UpdateCurState를 통해 현재 스테이트 딕셔너리의 모든 값을 가져와 StateUpdate실행입니다.
이를 통해 다들 많이 하는 FSM패턴이지만 한 번에 여러 가지 상태를 가지고 관리할 수 있게 만들어봤습니다.
Agent 구현 (VIVI)
이제 움직일 물체를 만들 차례입니다.
간단하게 추상클래스로 만들어봤습니다.
VIVI, Wall, Lava, Water.. 등등 아주 많은 것이 존재하기 때문에 추상이에요
이후 VIVI를 만들어 Agent상속받고 Awake에서 스테이트머신 Init을 해줍니다.
이후 YouState를 살펴봅시다
Enter 했을 때 저 Handle함수를 구독해 줍니다.
public override void Enter()
{
_agent.inputReader.OnMovementEvent += HandleOnMovement;
}
Handle에서 쿨타임이 되었다면
방향의 타일 중앙 좌표로 닷트윈을 사용해 움직이는 함수입니다.
Setting 함수는 만약 AD와 WS가 같이 눌렸다면 AD만을 우선으로 하기 위한 세팅입니다.
여기서 저 mapInfoSO를 알아봅시다.
MapInfoSO
바닥 타일과 장애물 타일을 받아오고,
현재 좌표와 방향을 받으면
현재 좌표에서 방향으로 한 칸 이동한 좌표를 건네주는 함수입니다.
모든 게 끝이 난 거 같습니다 이제 에디터에서 세팅을 해주면 됩니다.
마지막 에디터 세팅
음.. 대충 봐주세요...
결과물
마치며
화요일에 중간발표인데 그전까지 더 많이 해야겠습니다.
'개발일기 > VIY' 카테고리의 다른 글
[개발일지]VIY Push 버그 수정 #05 (2) | 2024.10.30 |
---|---|
[개발일지] VIY Rollback시스템 완..? #04 (1) | 2024.10.30 |
[개발일지] VIY Push시스템 만들기 #03 (5) | 2024.10.29 |
[개발일지] VIY 롤백시스템 #02 (3) | 2024.10.26 |
[개발일지] VIVI Is You 줄여서 VIU #00 (5) | 2024.10.24 |