어제 한 일
HUD 감소처리 말고도 닷지 액션 재생 처리를 일부 완료함
| bHasDodgeMovementInput | CharacterInputState.WantsToStrafe | 결과 |
|---|---|---|
| false | Any | CHT_Dodge_Backsetp |
| true | false | CHT_Dodge_Roll |
| true | true | CHT_Dodge_Step |
| EquippedStyle | LocomotionDirection | 결과 |
|---|---|---|
| BareHand | F | AM_BH_Step_F |
| OneHand | FL | AM_1H_Step_FL |
| TwoHand | FR | AM_2H_Step_FR |
| 이전 프로젝트 때 모조리 데이터테이블로 상황별 몽타주 목록을 관리하느라 테이블 구조가 4단계로 나뉘었던 현상을 언리얼의 Chooser Plugin을 사용해서 아주 깔끔하게 역할 분리할 수 있었음 |
Chooser Plugin을 쓰면 조건 변수만 업데이트해주면 특정 조건일 때 이 몽타주를 쓰세요 같은 명령을 코드에 남기지 않을 수 있게 됨. 게다가 테이블을 나처럼 중첩시킬 수 있어서 복잡한 조건들도 에셋 하나로 핸들할 수 있음

엘든링처럼 스탯이 소모됐을 때 RecentLoss가 잘 표현되고 여러번 쌓여도 타이머가 갱신되지 않고 초기화되는 모습
그리고 애니메이션 에셋이 4방향밖에 없지만 구르기, 스텝은 8방향이 되어야해서 RootMotion을 비활성화하고(In-Place) 직접 Launch Character로 제어해봤음. 생각보다 나쁘지 않음
비결은 Curve에 있었음.

애니메이션이 자연스럽게 재생되는 이유는 이렇게 실제 물리법칙에 의거한 프레임별 이동량의 차이에서 오는 것인데, 이걸 애니메이터들이 잡아준 것을 쓰지 않고 프로그래머가 직접 제어할 때 아무래도 디테일이 떨어지기 마련임. 그걸 알기에 웬만하면 애니메이션 자체의 이동량을 쓰려고 함.
그런데 어쩔 수 없는 경우엔 Curve를 그럴싸하게 잡아줌으로써 얼추 비슷하게 맛을 낼 수 있음.

0과 1 사이 정규화된 커브로 정해진 이동거리를 커브에 맞춰 이동시키면 사실상 애니메이션 루트본의 움직임과 다를 바 없는 제어가 가능해짐.
시스템 설계
매버릭 프로젝트는 앞서 언급했듯이 스킬 기반 소울라이크 전투 시퀀스를 핵심으로 삼고 있음. 약공 강공 차지공격은 소울라이크의 시스템을 그대로 계승하되, 유저가 특정 스킬을 통해 능동적으로 수치를 적립해 강화된 스킬을 사용함. 이런 전투를 구현하려면 시스템을 잘 설계해야 함.
그래서 우리는 플레이어/적 공통으로 사용할 기능들을 컴포넌트로 분리해 관리하고자 했음.
- 캐릭터의 패시브 스탯을 관리하는 StatComponent
- 캐릭터의 동작 재생을 담당하는 ActionComponent
- 캐릭터의 전투 입력에 맞는 스킬(공격/방어)을 선택해주는 CombatComponen t
- 캐릭터의 전투 중 액티브 스택을 관리하는 CombatStackComponent
- 피격자의 피격 방향, 런치 등 처리용 HitReactionComponent

각 컴포넌트는 적어놓은 역할만 오로지 수행함. 책임을 엄격히 분리함으로써 개발 생산성을 끌어올렸고 유지보수 비용을 줄이고자 함.
공격자와 피격후보 간 대미지 처리 담당은 컴포넌트가 아니라 서브시스템으로 격상
일정 관리
FGT까지 약 3주 반정도 남음. 마지막 주가 발표 준비로 뺸다하면 2주 반정도. 현재까지의 진행상황은:
- 플레이어
- 로코모션 구조 완성
- 액션 컴포넌트 완성
- 적
- AI 구현 중(추적은 하나 공격 미완)
오늘 설계를 완성했고 구현을 해야하는 것들:
- CombatComponent
- CombatStackComponent
- HitResolverComponent
- HitReactionComponent
- 에셋 제작
- 애니메이션 모션
플레이어, 무기 메쉬얘가 가장 우선순위가 낮음- VFX
- SFX
- 캐릭터 테이블 만들고 플레이어/적 모두 공통 로직 타게 해야함