Game Develop

고유이름(태그) 설정하기. 본문

ComputerGraphics/My Project

고유이름(태그) 설정하기.

MaxLevel 2022. 7. 29. 17:26

포폴에 너무 인게임컨텐츠가 부실해서(심지어 UI도 구현을 안했었다) 옵저버패턴 활용해서 UI코드를 작성하는 중이다.

인게임에 UI를 배치하면 위치조정을 해야하니 그냥 Transform 클래스에 TRS값 조절(Translation,Rotation,Scale)하는 ImGui윈도우를 렌더하는 함수를 추가했다.

ImGui윈도우를 생성할때는 고유이름으로 생성해야하는데, 중복될경우 한개만 렌더가 된다. 꼭 이거때문이 아니더라도 각 오브젝트의 이름을 고유값으로 설정하고 싶었다. 그래서 트랜스폼을 상속받는 객체가 태그네임을 Set할 때 고유한값으로 Set할 수 있도록 코드를 작성했다.

 

 

대충 로직은 아래처럼 짰다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Transform::SetTag(string tag)
{
    int count = 0;
    string tagName = "";
 
    for (int i = 0; i < mTagMap[tag]; i++)
    {
        count++;
    }
 
    mTagMap[tag]++;
 
    if (count == 0)
    {
        tagName = tag;
    }
    else
    {
        tagName = tag + "(" + to_string(count) + ")";
    }
 
    this->mTag = tagName;
}
cs

mTagMap은 정적변수이다. 즉, 모든 Transform을 상속받는 객체들이 공유하는 변수이다.

 

먼저 Set하려는 string값에 대해 mTagMap에서 몇번 카운팅 됐는지 체크한다. 그리고 자신이 사용한것에 대해서도 카운팅한다. (mTagMap[tag]++)

0번이면 그대로 오브젝트의 태그네임으로 사용하고, 1번이상이면 카운트값을 태그네임 뒤에 스트링으로 변환해서 붙인 후, 태그네임으로 사용한다.