AbilitySystemComponent - PlayerState에 연결
InitAbilityActorInfo
Owner(PlayerState), Avatar(능력을 사용하는 주체 - 폰) 설정
PlayerState::PostInitializeComponents 시점에서는 폰이 아직 Possess되지 않았기 때문에 Avatar은 nullptr
HeroComponent에서 PawnExtComp->InitializeAbilitySystem
폰이 Possess되어 준비된 상태로 InitAbilityActorInfo 다시 실행해 Avatar 재설정
AbilitySet
GameplayAbility와 태그를 들고 있다.
PawnData에서 AbilitySet을 들고 있고 PlayerState에서 들고 있는 PawnData로 AbilitySet에 있는 Ability들을
AbilitySystemComponent에 부여한다. GiveToAbilitySystem 함수 사용
Ability Type
NonInstanced - 인스턴스화 될 수 없고 CDO형태로만 존재
InstancedPerActor - 액터 별로 인스턴스화
InstancedPerExecution - 실행할 때 마다 인스턴스화
인스턴스화되지 않으면 처음 값에서 변경이 불가능하고 인스턴스화 되면 생성 이후에 값이 변경 가능하다는 차이가 있다.
Ability 부여
AbilitySpec에 Ability와 그에 대응하는 태그를 저장, GiveAbility로 능력을 부여하면 또 AbilitySpecHandle을 반환
핸들 값은 Ability를 부여하고 해제하는데 용이하다.
캐릭터마다 능력이 다르겠지만, 무기마다도 능력이 다르다. 그래서 EquipmentDefinition에도 AbilitySet을 추가한다.
AppliedEquipmentEntry에도 AbilitySet_GrantedHandles 로 부여된 능력의 핸들을 관리한다. EquipmentInstance에서 AddEntry할 때 GiveToAbilitySystem으로 능력을 부여한다. RemoveEntry 시 Handle값 이용해 TakeFromAbilitySystem으로 능력을 제거한다.
BindAbilityActions를 HeroComponent의 InputAction Bind한 곳에서 실행한다. BindAbilityActions 는 Input_AbilityInputTagPressed와 Input_AbilityInputTagReleased 두 함수를 Bind한다.
Input_AbilityInputTagPressed에서 태그에 해당하는 능력을 Pressed, Held Handle에 추가한다.
Input_AbilityInputTagReleased 에서 태그에 해당하는 능력을 Held 에서 제거, Release 핸들에서 추가한다.
AbilityActivationPolicy는 OnInputTriggered(trigger), WhileInputActive(held), OnSpawn(passive) 세 가지가 있다.
ProcessAbilityInput에서 입력에 따라 AbilitiesToActivate에 핸들을 추가하고 추가된 값들을 TryActivateAbility로
모두 발동시킨다.
한프레임 내에 입력 처리가 모드 완료되고 실행하는 것이 PostProcessInput이다. Input_AbilityInputTagPressed, Input_AbilityInputTagReleased 로 모든 입력을 처리한 후 PostProcessInput에서 ProcessAbilityInput을 부른다.
GameplayTagBlueprintPropertyMap
AnimInstance안에 있는 bool값과 GameplayTag 값을 매칭해줌
InitializeWithAbilitySystem함수로 AnimInstance와 AbilitySystemComponent를 연결한다.
AbilitySysetmComponent::InitAbilityActorInfo(Ability를 사용하는 Actor가 생길 때마다 초기화) 에서 InitializeWithAbilitySystem를 해준다.
그리고 애니메이션 블루프린트에서 태그와 Property(bool)값을 정하면 AbilitySystemComponent에 태그가 등록이 되면
Property가 자동으로 true로 바뀐다. 태그는 어빌리티에서 활성화 시 태그 쪽에 작성하면 된다.
'Unreal' 카테고리의 다른 글
| [Unreal] Lyra 프로젝트 분석 - 11. Common UI (0) | 2025.02.10 |
|---|---|
| [Unreal] Lyra 프로젝트 분석 - 10. GamePlayCue (0) | 2025.02.09 |
| [Unreal] Lyra 프로젝트 분석 - 08. Weapon System (0) | 2025.02.09 |
| [Unreal] Lyra 프로젝트 분석 - 07. Cosmetic (0) | 2025.02.08 |
| [Unreal] Lyra 프로젝트 분석 - 06. Game Feature (0) | 2025.02.08 |