로봇의 무기 관리 시스템
문제
- 기존 기획은 마스터 포즈 컴포넌트에 의해 무기 변경시 로봇의 부위별 메시가 바뀌는 형식
- 무기도 신체 부위의 일부가 바뀌는 느낌으로 생각
- 따라서 무기가 변경될때 장착되는 부위에 맞는 메시가 존재하는 형태로 인식
Ex) 어깨, 팔에 장착되는 A 무기의 메시가 장착 부위에 따라 상이 - 하지만, 위 방식대로 무기가 장착 부위마다 별도의 메시가 필요하다면 (무기 종류) X (장착 부위) 만큼의 메시 에셋이 필요
- 아무리 생각해도 이런 구조는 비효율적이라 판단
- 기본 메시에 무기 장착 위치를 나타내는 소켓 존재 + 무기 메시가 따로 존재하는 존재가 이상적이라 생각
ㅡ> 기존 UObject 기반의 순수 데이터 클래스 형태의 무기 구조 개편 필요
의사 결정
- 기획자분과 상의 결과 : 로봇의 몸 구성요소 중에 팔, 다리, 몸통의 경우만 마스터 포즈 컴포넌트를 활용한 애니메이션 적용
- 무기의 경우에는 기본 중심 메시에서 적절한 위치에 소켓을 달아 해당 소켓을 기준으로 부착하는 형식이 좋아 보임
- 기존 UObject보다는 AActor 기반의 클래스가 되어야 무기 자체적으로 메시를 관리하는 이상적인 구조가 될 것이라 판단
- AActor 기반의 무기 클래스가 된다면 기존 CombatComponent의 리팩토링이 필요하다 판단
- CombatComponent에서 함께 담당하던 무기 공격 범위 감지 & 인풋 버퍼 관련 기능을 분리하는 것이 좋아 보임
- 위와 같이 할 경우 무기 공격 범위 감지 관련 기능만 가진 새로운 CombatComponent를 무기 액터에서 재활용 가능
ㅡ> 따로 로직 구성할 필요 없이 같은 컴포넌트를 캐릭터, 로봇이 공유 가능 (근접 무기 한정) - RobotCombatComponent의 경우도 무기 관리 기능에만 집중 가능
결론
- 무기는 UObject 기반이 아닌 AActor 기반 클래스로 변경
- 무기를 메시의 알맞은 소켓 위치에 부착하는 형식
- CombatComponent를 2가지 컴포넌트로 분리
- InputBufferComponent : 인풋 버퍼 관련 기능
- CombatComponent : 근접 무기의 공격 범위 탐지
- RobotCombatComponent의 담당 기능 축소
- 기존 CombatComponent를 상속하던 구조에서 개별적인 클래스로 분리
- 무기 관리 기능과 기존 CombatComponent 기능에서 무기 관리 기능만 하도록 분리
- 근접 무기의 공격 범위 탐지는 무기 액터의 새로운 CombatComponent가 처리하도록 리팩토링
- WeaponManagerComponent로 이름 변경
참고자료