InputSystem 코드
public : https://github.com/LCU97/Cat/tree/main/Source/HumanAndCat/Public/Inputs
private : https://github.com/LCU97/Cat/tree/main/Source/HumanAndCat/Private/Inputs
경험과 결과
주요 클래스 및 함수 설명
1. 경험과 결과
InputSystem 은 해당 프로젝트에서 새로 만든 기능이 아니고 CombatFramwork 기능 에셋을 공부하며 다른 팀원과 만들었던 기능을 해당 프로젝트에 가져와 사용하였다.
움직임이 자연스럽게 연결되기 위해서는 AnimMontage 가 실행되는 도중에 다음 행동이 실행되야한다고 생각했다. CombatFramwork 기능 에셋에서 제공하는 InputSystem 을 전부 삭제하고 당시 같이 공부하던 팀원과 같이 새로운 InputSystem 을 만들었다.
AnimNotifyState 와 InputComponent 를 이용해 입력을 저장하고 최종으로 사용할 입력을 설정하기까지 생각하고 만들었었다.
같이 공부하는 팀원이 모든 입력과 모든 Montage 에서 각각에 맞는 다양한 입력 처리가 가능하도록 만들어보자는 의견이 있었고 추가로 Handler 와 Command 를 만들어 완성했다.
2. 주요 클래스 및 함수 설명
ANS_BufferInput :
특징 1) Montage 의 특정 프레임에서 다음 행동 처리를 해주고 싶을 때 사용한다.
특징 2) InputHandler 변수를 가지고 Montage 에서 설정한 Handler 값을 복제해 InputmanagerComponent 에게 알려준다.
특징 3) NotifyBegin 때 InputBuffer 를 생성 가능하게 만들고 NotifyEnd 때 InputBuffer 생성을 불가능하게 만든다.
InputComponent :
특징 1) BufferObject 생성 가능 여부를 조절한다.
특징 2) BufferObject를 생성하고 InpuHanlder 에 저장한다.
특징 3) 실제 다음 행동 처리를 실행 하기 위해 InputHanlder 의 Excute 를 실행합니다.
InputBufferingObject :
특징 1) 입력 관련 변수와 Command 에게 알려줄 변수들이 존재한다.
InputHandler :
특징 1) 변수
EInputPropertyType :: 핸들러의 타입을 설정한다.
타입은 3가지로 Last, Immediately, Priority 가 존재한다.
Last = 들어온 InputBuffer 중 맨 마지막에 들어온 Buffer 를 최종 사용 Buffer 로 선택한다.
Immediately = InputBuffer 가 하나라도 들어오면 해당 Buffer 를 최종 사용 Buffer 로 선택한다.
Priority = 들어온 입력 중 가장 우선순위가 높은 입력을 최종 Buffer 로 선택한다.
TMap<UInputAction*, int32> AllowedInputActions;
Handler 에 저장될 수 있는 허용되는 입력을 의미한다. Value 는 Priority 로 사용된다.
TArray<UInputBufferingObject*> InputBufferingObjects;
허용된 InputBuffer 를 담는 컨테이너
TObjectPtr<UInputBufferingObject> SelectBufferingObject;
최종 선택된 InputBuffer
TArray<TScriptInterface<IInterface_InputCommand>> InputCommands;
사용할 Command 를 담는 배열
TMap<FGameplayTag, UBaseCommand*> StateCommandMap;
최종 사용할 InputBuffer의 Tag 와 비교하여 실제 사용할 Command 를 정해줄 변수
아래와 같이 설정하고 나면 NotifyBegin 에서 밑의 Handler 설정을 복제한다.
특징 2) 함수
1. NewInputBuffer 가 허용된 입력이라면 Handler 에 추가
2. 사용할 Command 를 설정합니다.
3. Handler 가 Invoker 역할로 Command 를 실행
Command :
특징 1) Command 인터페이스로부터 Execute 함수를 호출
원하는 Command 를 만들어 캐릭터의 다음 행동을 처리
단점 보안 :
위의 InputSystem 은 AnimMontage 가 있어야 사용 가능하다. 만약 맨 처음 NormalAttack 입력 이 들어오면 AttackState 에서 NormalAttackAbility, SpecialAttackAbility 등등의 여러 Ability 중 NormalAttackAbility 를 실행 할 수 있어야한다.
Interface 를 사용해 Ability 를 여러가지 사용하는 State 가 상속 받게 만든다.
State 변경 함수에 특정 AbilityTag 를 넣어준다.
변경될 State 가 Interface 를 상속 받고 있으면 사용할 Ability 의 GameplayTag 를 넣어준다.
'프로젝트 > H.W.H' 카테고리의 다른 글
SkillActor & Weapon (0) | 2024.10.17 |
---|---|
Weapon & WeaponComponent (0) | 2024.10.17 |
Targeting & Camera (2) | 2024.10.16 |
FSM - 상태 패턴과 (State & Ability) (0) | 2024.10.15 |