오브젝트가 어떤 태그를 들고 있는지, 없는지에 따라 현재 상태를 나타낼 수 있음. (ex. stun)
기존에는 캐릭터의 상태를 bool이나 enum으로 처리하던 것을 GameplayTags로 대체할 수 있고, 이로 인해 객체에 특정 GameplayTags가 있는지 여부를 확인하며 논리 구조를 세울 수 있습니다.
오브젝트에 태그를 부여할 때는 GAS와 상호작용을 할 수 있도록 AbilitySystemComponent에 부여하는 것이 일반적입니다.
UAbilitySystemComponent는 IGameplayTagAssetInterface를 구현하여 GameplayTags에 엑세스 하는 함수들을 제공합니다.
GameplayTag는 DefaultGAmeplayTags.ini에 정의되어 있습니다.
언리얼 엔진(UE5 기준)에서는 DefaultgGameplayTags.ini를 직접 수정하는 것이 아닌, 에디터 내의 Project Setting→Project→GameplayTags에서 Create, rename, search for reference, delete를 할 수 있도록 제공하고 있습니다.
이 화면에서는 생성, 태그 이름 변경, 레퍼런스 검색, 삭제 등이 가능합니다.이 화면은 레퍼런스 뷰어 화면입니다.
Search for References를 사용하면, Reference Viewer와 비슷한 형태의 그래프 에디터가 나타나며, 그 안에서 해당 GameplayTag를 사용하고 있는 Asset 목록을 확인할 수 있습니다.
그러나, C++ 클래스 내부에서 GameplayTag를 사용하고 있는 레퍼런스는 확인할 수 없습니다.
아마, C++ 내부에서는 FGameplayTag::RequestGameplayTag(FName)를 사용할 것으로 보이기에 태그 이름을 직접 전체찾기 하는 방법 밖엔 없을 것으로 보입니다.
GameplayTag의 이름을 바꾸면, 원래 GameplayTag를 참조하는 Asset이 새 GameplayTag로 리디렉션 될 수 있도록 리디렉션이 생성됩니다.
이 부분을 꼭 숙지하고, GameplayTag를 변경할 때는 리디렉션을 정리하는 습관을 들이는 것이 좋습니다.
제일 좋은 것은 리디렉션을 생성하지 않도록 처음에 GameplayTag 규칙을 잘 정의하는 것입니다.
리디렉션 생성을 회피하는 방법으로 추천하는 것은 다음과 같습니다.
새로운 GameplayTag를 생성
Search for References를 통해 기존 GameplayTag를 직접(manually) 새로 만든 GameplayTag로 변경
이전의 GameplayTag 제거
GameplayTag가 Replicate되는 것은 GameplayEffect를 통해 추가되는 경우입니다.