2025.04.02
스탯 기반 턴 시스템 구현
<스탯 관리 구조 고민 및 구현>
어제도 시간을 쓰긴 했다. 다만 사용한 시간 중 대부분을 클래스를 어떻게 구성할 것인가에 대한 고민에 투자했다. 스탯 기반으로 턴이 돌아가게 하려면 스탯을 관리해야 할텐데 어디서 관리할까? 가 주요 고민이었다.
어제 생각한 건 "단순히 스탯을 Unit 클래스에 넣는 걸로는 장기적으로 관리가 어려울 것 같은데 어떻게 하면 좋을까?" 였고, 오늘까지 고민한 끝에 아래처럼 구성하기로 결론을 내렸다.
UnitStatus: 캐릭터의 스탯에 관련된 것들을 종합적으로 관리, 아래 세 클래스의 인스턴스를 갖고 있다.UnitAttributes: 힘, 민첩 등 캐릭터의 순수 스탯을 관리. 레벨 업 등으로 인해 영구적으로 변경되는 사항도 관리한다.UnitProgression: 캐릭터의 레벨과 경험치를 관리. 레벨업 할 때의 이벤트를 추가해서UnitStatus에서 그 이벤트를 구독하면서UnitAttributes에 영향을 줄 예정UnitEquipment: 캐릭터의 장비와 그에 따른 능력치 변경을 관리UnitEffect: 캐릭터의 버프 및 디버프와 그에 따른 능력치 변경을 관리
결국 Unit 에서는 UnitStatus 에만 접근해 원하는 능력치를 얻어낼 예정이다. 예를 들어 이번에 UnitStatus 에 추가한 GetMovementPriority 는 하위 클래스 인스턴스에서 필요한 값을 뽑아와서 턴 우선순위 값을 반환하는 메서드다.
<스탯 기반 턴 시스템 적용>
위에서 추가한 UnitStatus.GetMovementPriority 를 사용해 TurnSystem 내부에 있는 unitList 를 정렬하고, 정렬된 순서대로 턴이 진행되게끔 구현.
턴이 바뀔 때마다 캐릭터의 선택도 자동으로 되게끔 했다.
<다음 스탭>
다음 스탭은 턴이 바뀔 때 해당 캐릭터로 카메라가 이동하도록 하는 것. 그걸로 턴제 시스템은 한 번 일단락 지은 뒤 클래스 구분 및 기본 스탯 적용으로 넘어갈 예정이다. 이미 UnitStatus 및 하위 클래스들의 틀을 잡아놓았으므로, 어려울 것 같지는 않다.