Gameplay Tags란?
Gameplay Tags는 기본적으로 이름이다.
이들은 Gameplay Tag Manager에 등록되며, 계층적 구조를 가짐.
- 예를 들어, 부모-자식-손자와 같은 구조를 가지며, 계층은 점(.)으로 구분됨.
- 계층 구조는 반드시 3단계일 필요는 없으며, 더 많거나 적을 수도 있음.
왜 Gameplay Tags를 사용하는가?
FString, FName, enum, 혹은 boolean 값으로 대체할 수 있는 것처럼 보이지만, Gameplay Tags에는 다음과 같은 장점이 있음.
- FName 기반:
- Gameplay Tags는 내부적으로 FName을 기반으로 하며,
tag name이라는 FName 멤버 변수를 포함함.
- 계층적 구조:
- 이 구조 덕분에 코드의 유연성이 높아짐.
- 예를 들어, 두 태그가 동일한 루트 태그 이름을 공유하는지만 비교하는 등의 부분적 비교도 가능함.
GAS에서 Gameplay Tags의 활용
GAS는 거의 모든 클래스에서 Gameplay Tags를 활용하도록 설계됨.
태그와 액터의 관계
- 태그를 액터에 부여한다고 표현할 때, 이는 액터의 Ability System Component(ASC)에 태그를 부여하는 것을 의미.
- ASC는 Gameplay Tag Asset Interface라는 인터페이스를 구현합니다.이 인터페이스에는 다음과 같은 유용한 기능들이 포함되어 있음:
- ASC가 소유한 모든 태그를 확인.
- 특정 태그를 소유하고 있는지 확인.
- 주어진 태그와 일치하는 모든 태그 가져오기.
- 소유한 태그 중 하나라도 지정된 태그와 일치하는지 확인.
인터페이스 기반이기 때문에, ASC 외 다른 클래스에서도 이 인터페이스를 구현하여 자체적으로 동작을 정의할 수 있다.
Gameplay Tag Container
- ASC나 클래스가 여러 개의 태그를 소유할 수 있으므로, 태그는 Gameplay Tag Container에 저장됨.
- 이 컨테이너는 일반 배열 대신 사용되며, 태그와 관련된 추가 기능과 효율성을 제공.
Tag Map Count
- 동일한 태그가 컨테이너에 여러 번 포함될 수 있음