본문 바로가기

프로젝트/H.W.H

InputSystem 을 활용한 다양한 행동 처리

 

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