오랜 고민 끝에 위와 같이 Action Component를 분리하여 Action에 관한 내용을 담당하기로 했습니다.
* 바뀐 구조의 장점
- 기존에 만든 Action Asset을 여러 Weapon에서 재사용 가능합니다.
- 플레이어의 현재 상태, 어떤 버튼을 눌렀는 지에 따라 원하는 액션을 정해줄 수 있습니다.
=> 즉, 다음과 같은 구조가 됩니다.
예를 들어,
1. 지상에서 Hitted 상태일 때 None 버튼(상태 변환 시 실행)을 누르면 경직 액션이 실행
2. 공중에서 Idle 상태일 때 Evade 버튼을 누르면 공중 대쉬를 실행
3. Guard 상태일 때 땅에서 Attack 버튼을 누르면 어퍼 슬래쉬를 실행
4. 대쉬 상태일 때 땅에서 Attack 버튼을 누르면 스팅거 스킬을 실행
과 같은 액션을 손쉽게 추가하고, 제거할 수 있습니다.
뿐만 아니라, Action 관련된 내용은 ActionComponent에서 담당하게 되어
AnimNotify들은 더이상 WeaponComponent에서
지금 실행 중인 액션이 무엇인지 확인할 필요가 없습니다.
긴 고민 끝에 위와 같은 구조를 완성하여 매우 기쁩니다.
추가로, 액션 중 (nullptr이 아닌) 다른 새로운 액션의 실행이
기존 액션을 조기종료 (EndAction()호출) 시키고 발생하도록 코드를 개선했습니다.
위의 함수는 어떤 입력이 발생 시, 트리거에 걸맞는 액션을 호출하고
기존에 있던 액션이 있으면 조기 종료 시키는 코드입니다.
RecentAction은 더블 포인터로 선언되어 UCAction*의 주소를 바꿔가며 기억하도록 만들었습니다.
결과적으로 다음 영상과 같이 액션을 실행합니다.
'프로젝트 > 프로젝트 진행 내역' 카테고리의 다른 글
UC++ 프로젝트 - 10 (0) | 2022.12.28 |
---|---|
UC++ 프로젝트 - 9 (0) | 2022.12.23 |
UC++ 프로젝트 - 7 (0) | 2022.12.02 |
UC++ 프로젝트 - 6 (0) | 2022.11.17 |
UC++ 프로젝트 - 5 (0) | 2022.11.09 |