티스토리 뷰

Gameplay Tags Singleton

현재 Attribute Menu 자체는 만들었지만, UI 메뉴에 데이터를 broadcast하려면 각 속성을 식별할 수 있는 방법이 필요하다.

이를 위해서 각 Attribute 마다 고유한 Gameplay Tag를 부여하여 활용할 것이다.

 

기존에는 Project Settings에서 직접 태그를 추가하거나, Data Table을 사용했지만 C++에서는 긴 문자열을 계속 작성해야해서 오타의 위험이나 유지보수가 어렵다는 단점이 있다.

따라서 다음과 같이 변수로 접근하여 활용할 것이다.

"Attributes.Secondary.Armor" -> X
GameplayTags.Attributes_Secondary_Armor -> O

 

이에 대한 해결방안으로 프로젝트 전체에서 사용할 Gameplay Tag의 중앙 저장소를 만들것이다.

따라서 새로운 C++ 클래스를 생성하고, 해당 클래스에 모든 주요 Gameplay Tag를 저장한다.

그리고 단순 저장소 역할이기에 특정 클래스를 지정하는 것이 아니라 None으로 생성한다.

 

우리는 해당 클래스를 단순 데이터 보관소로 쓸 것이기에, 기존에 선언된 생성자/소멸자와 같은 기능은 필요없다.

따라서 기존 내용을 지우고 구조체 내용만 선언해서 쓸 것이다.

 

그리고 우리는 싱글톤(Singleton) 패턴을 적용하여 프로젝트 전체에 FAuraGameplayTags 인스턴스가 단 하나만 존재하도록 설계할 것이다.

이를 통해 태그 저장소 객체를 하나만 만들고, 모두가 공유하는 형태로 사용한다.

그래서 구조체 안에서는 static을 사용하여 객체가 없어도 호출가능한 Get 함수를 사용한다.

이러면 다음과 같이 태그 저장소 객체를 일일히 선언할 필요가 없어진다.

FAuraGameplayTags Tags;
Tags.Get(); 
-> 기존에는 매번 사용하는 곳마다 위 코드 작성
-> static get 함수 사용시 필요 X

 

그런데 Get이 반환할 객체가 있어야 한다.

그래서 구조체 안에 해당 변수 또한 static으로 선언한다. (객체마다 존재 X -> 클래스 자체가 소유하는 변수)

그리고 복사하지 말고 원본 객체를 참조하도록 Const를 사용할 것이다.

class Test
{
public:
    int Value;
};

Text A
Text B
-> 2개 생성

--------------------

class Test
{
public:
    static int Value;
};

Text::Value
-> 1개만 존재

 

따라서 static FAuraGameplayTags GameplayTags;라 선언하면, 이는 프로젝트 전체에서 하나만 존재하는 FAuraGameplayTags 객체를 의미한다.

그리고 마지막으로 실제 태그를 생성하고 저장소에 채워 넣는 초기화 함수가 필요하다.

 

이제 구현에 들어가기에 앞서, 먼저 헤더에서 선언한 static 변수를 활용하기 위해 정의해주는 작업을 해주어야 한다.

태그를 생성하려면 언리얼의 GamepalyTagsManager를 사용해야한다.

매니저의 AddNativeGamepalyTag 함수를 통해서 네이티브 태그(C++ 코드에서 생성한 태그)를 최종적으로 생성하게 된다. 

 

이를 통해 현재 네이티브 Gameplay Tag를 생성할 수 있는 구조를 만들었고, 다음강의에서 해당 초기화 함수를 어느 시점에서 호출할 지 다룰 것이다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함