티스토리 뷰
저번 주 부터 최종 프로젝트에 돌입하였다.
사실 주의 마무리로 적는다는 개념으로 작성하기에는 다소 많이 늦은 감이 있으나, 일단 WIL을 프로젝트 경과 정리용으로 작성하고 있는 터라, 앞으로도 기간은 벗어났어도 당 주에 작업한 내용에 대해서 서술하는 방식으로 작성하게 될 듯 하다.
솔직히는 담당한 영역에 집중하다 보면 본 게시글을 작성할 시간이 녹록치 않은 것이 사실이기도 한 지라...
[근데 이러면 WIL이 맞느냐는 의문이 든다는 점은 뒤로 넘기도록 하자... 이 때 까지 계속 이렇게 해온 터라 지금 바꾸기도 난감하다.]
더 이상 주 단위로 작성하기가 힘든 것으로 판단, 최종 프로젝트 별개의 카테고리로 분리하였다.
다른 것이 아니라, 최종 프로젝트의 작업량 덕분에 TIL을 쓰면서 WIL까지 작성할 여유가 도저히 나지를 않았다.
따라서, 본 카테고리는 주 단위로 정해놓고 틈이 날 때에 정리할 예정이다.
그리고, 이번 프로젝트는 실 출시를 하게 될 가능성도 있는 지라, Git URL을 가져오기는 많이 난감하다.
때문에 이번에는 Git URL을 작성하지 않을 예정이다.
그리고 각 요소는 코드를 작성하기 보다는 구성 위주로 간략하게 서술할 예정이다.
저번 주에 본인이 담당한 파트는 다음과 같다.
- 게임 기획 [간단하게 핵심 요소만.]
- 몬스터
- 플레이어 및 몬스터의 공통 기반 시스템 구성.
- 몬스터 시스템 구성.
- 몬스터 자동 생성 시스템
- 통합 액션 시스템 [제작 중]
오늘은 이 중에서 몬스터에 대해서 정리 해 볼까 한다.
몬스터의 구성
본 프로젝트에서 몬스터는 다음 클래스들의 조합으로 구성되어 있다.
※ 해당 클래스들은 부모 클래스를 플레이어 캐릭터와 공유하도록 구성되어 있다.
- Monster: 몬스터의 각 컴포넌트를 총괄하고 있는 클래스.
- MonsterStatus: 몬스터의 스테이터스를 담당하고 있는 클래스.
- MonsterDeath: 몬스터 사망 처리용 클래스.
- MonsterStateMachine: 몬스터의 FSM 클래스. MonoBehaviour가 아니라, Monster 내부 클래스로 작동된다.
- MonsterIdleState: 기본 상태.
- 별다른 행동 없이 가만히 서 있는 상태.
- 플레이어가 일정 거리 안으로 들어오면 MonsterCaseState로 변경.
- MonsterChaseState: 플레이어를 추적하는 상태.
- 플레이어 방향으로 정해진 속도로 이동한다.
- NavMeshPlus를 이용, 벽이나 장해물을 피해서 이동한다.
- 플레이어와의 거리가 일정 거리 안일 경우에는 MonsterAttackState로 변경된다.
- MonsterAttackState로 전환되는 데에는 일정 시간의 대기시간이 존재한다.
- MonsterAttackState: 플레이어를 공격하는 상태.
- 짧은 거리를 돌진한다. 동시에 공격 판정을 켠다.
- 일정 시간 이후에 MonsterChaseState로 변경된다.
- 추후 통합 Action을 사용하는 상태로 변형될 예정.
- MonsterDeathState: 사망 상태
- 생명력이 전부 감소되면 강제 전환.
- 스프라이트가 반투명 상태가 되면서 모든 충돌 판정 및 이동 기능이 비활성화된다.
- 몬스터가 ObjectPool에서 다시 소환될 때 MonsterIdleState로 전환되면서 자동으로 해제된다.
- MonsterKnockbackState: 피격 상태
- 일정 시간 동안 모든 행동이 불가능해 지는 상태.
- 정해진 시간이 지나면 MonsterIdleState로 변경된다.
- 단, 이 때 한정으로 Rigidbody가 Dynamic으로 설정되면서 넉백이 적용되게 된다.
- 일정 시간 동안 모든 행동이 불가능해 지는 상태.
- MonsterIdleState: 기본 상태.
이러한 몬스터를 MonsterGenerator에서 ObjectPool을 통해서 계속해서 생성하는 방식으로 구성되어 있다.
MonsterData를 통한 초기화 구조
아직 미완성(스프라이트 항목 없음, 애니메이션 항목 없음, 액션 시스템 적용 아직 안됬음.)이긴 하나, 이거 하나로 몬스터를 완전히 구성할 수 있는 데이터 파일으로 구성, 프리팹 하나로 모든 몬스터를 구성할 수 있도록 구성되어 있다.
[물론, 아직 추가하지 않은 부분들이 데이터로 구성할 때에 난감한 부분이긴 하다.]
이를 통해서 ObjectPool의 단일 항목으로 전체 몬스터를 생성할 수 있게끔 구성하였고, 그를 통해서 '안쓰는 오브젝트를 과량 들고 있는' 구조를 예방하고자 하였다.
추가로 기존에 다른 팀원이 작성해 놓은 Excel 연동 시스템을 통해서 Excel로 작업할 수 있도록 구성, Excel 파일으로 총괄 관리할 수 있도록 구성하였다.
사실, 설명할 거리가 딱히 많지가 않다.
아직 미완성이기도 하고, 지금은 단일 패턴 만 사용하도록 만들어서 그런 거기도 하다.
일단, 아직 간단한 몬스터 밖에 못 만들기 때문에, 나중에 한 번 재구성될 예정이다.
다만, 아마 기반 구조는 그대로 쓰이고, 패턴이나 Ai에 따라서 FSM만 손보게 되지 않을까...
다만, 누가 담당할지는 아직 정해지지 않아서, 본인이 아닌 다른 팀원이 담당하게 된다면 또 다를지도 모르겠다.
'스파르타 내일배움캠프 > 최종 프로젝트 리포트' 카테고리의 다른 글
최종 프로젝트 리포트 - 5 [중간 발표] (0) | 2025.01.07 |
---|---|
최종 프로젝트 리포트 - 4 [컴포넌트 기반 오브젝트 풀] (0) | 2025.01.06 |
최종 프로젝트 리포트 - 3 [인벤토리 시스템] (1) | 2024.12.29 |
최종 프로젝트 리포트 - 2 [액션 시스템] (0) | 2024.12.23 |
[팀 프로젝트 구상안] Rogue & Slash! (0) | 2024.11.24 |