- 새 게임플레이 태그 추가하면 계층 구조로 생성됨.
- 태그를 비교 또는 확인 하는 함수에서 유용하게 사용
- 기존 bool이나 enum으로 상태를 정의하던 것을 GameplayTags로 대
체
- 태그는 AbilitySystemComponent에 부여하는 것이 일반적
- IGameplayTagAssetInterface 구현을 통해 엑세스
Gameplay Tags
01
4
- C++ 클래스에서 사용하는 GameplayTag는 코드에서 찾아야함.
- FGameplayTag::RequestGameplayTag(FName);
- GameplayTag 이름을 바꾸면 리디렉션이 생성됨
- 리디렉션을 정리하거나, 생성되지 않도록 하는 습관 필요
Gameplay Tags
01
4
- GameplayTag 리디렉션 생성하지 않는 방법
1. 새로운 GameplayTag 생성
2. Search For Reference로 기존 GameplayTag 검색
3. 직접 새로 만든 GameplayTag로 변경
4. 이전 GameplayTag 제거
Gameplay Tags
01
4
- LooseGameplayTag 존재
- Replicate 되지 않는 GameplayTag
- 직접 관리 필요
- TagMapCount도 직접 관리 필요
- UAbilitySystemComponent::AddLooseGameplayTag()
- UAbilitySystemComponent::RemoveLooseGameplayTag()
Gameplay Tags
01
4
- 다수의 GameplayTag는 FGameplayTagContainer에 저장
- TArray<FGameplayTag>를 통해 저장할 수도 있으나, Container 사용
권장
- Tag는 FName을 사용
- Iteration을 위해 TArray<FGameplayTag>를 리턴하는 함수 존재
FGameplayTagContainer
01
4
- 저장된 GameplayTag의 인스턴스 수를 저장하는 TagMap 존재
- Container 내부에 GameplayTag가 존재할 수 있지만, TagMapCount
가 0일 수 있음.
- HasTag(), HasMatchingTag() 등 유사한 함수들은 TagMapCount도
같이 확인
FGameplayTagCountContainer
01
4
- 현재 GameplayTag의 parent 또는 child를 가져올 수 있음
- #include “GameplayTagManager.h”
- UGameplayTagManager::Get().FunctionName()
- Manager를 통해 비교 시, 상수 문자열 조작 및 비교보다 빠르게 처리
GameplayTagManager
01
4
- 클래스 멤버를 노출 할 때 특정 태그만 보이도록 설정
- UPROPERTY(Meta = (Categories =“GameplayCue”))
- 함수 파라미터에 특정 태그만 보이도록 설정
- UFUNCTION(Meta=(GameplayTagFilter=“GameplayCue”))
- GameplayTagContainer 파라미터는 필터링 불가능.
GameplayTagManager
01
4
- UAbilitySystemComponent는 GameplayTag가 추가/삭제 될 때마다
Delegate를 통해 사용자에게 알림
- 문법은 코드 참조
- EGameplayTagEventType에 따라 이벤트 시점 정함
- NewOrRemoved : 새롭게 추가/완전히 제거 된 경우
- AnyCountChange : TagMapCount 변경 마다
GameplayTag Delegate
01
4
- Callback 함수 등록 (Register)
- virtual void FunctionName(const FGameplayTag, int32);
- tag : 콜백을 호출한 Tag
- int32 : 새롭게 갱신 된 TagCount
- Delegate는 꼭 등록 후, 해제 필요 (Unregister)
GameplayTag Delegate
01
4
- GameplayAbility (a.k.a GA)
- GA는 게임 플레이 안에서 Actor의 어떤 스킬이나 액션을 할 수 있게
합니다.
- 하나 이상의 GA가 한번에 활성화가 된다면,
1. 뛰면서 (sprint)
2. 스킬(Skill)을 쓸 수 있습니다.
GameplayAbility
01
4
- 이것들을 모두 BP와 C++로 만들 수 있습니다.
- GameplayAbility 예
1. 점프 / 달리기
2. 스킬 시전
3. 일정 시간 동안 X번의 공격을 방어할 수 있는 패시브형 Block
4. 포션 사용, 문열기, 재료 수집
GameplayAbility
01
4
- GameplayAbility로 구현되지 않아도 되는 예시
1. 기본적인 행동에 대한 인풋(Movement Input)
2. UI와의 상호 작용 기능.
- 상점에서 사고 파는 행위
GameplayAbility
01
4
- 이것은 절대적인 룰은 아니고, 단지 추천 내용이며, 게임의 디자인에
따라 달라질 수 있습니다.
- 기본적인 기능과 함께 Level에 따라 Attribute 또는 GameplayAbility
기능 변경 가능
- 기본적인 행동에 Cost와 CoolDown을 GameplayEffect에 포함
GameplayAbility
01
4
- AbilityTask를 통해 일정 시간 기다릴 수 있음.
- 이벤트 대기
- Attribute 변경 대기
- 플레이어가 타겟을 지정할 때 까지 대기
- 특정 애니메이션이 출력될 때까지 대기
GameplayAbility
01
4
- 모든 GameplayAbility는 ActivateAbility() Override
- EndAbility 존재
- GameplayAbility가 완료되거나 취소 될 때 호출
GameplayAbility
01
4