SPUM 캐릭터는 이미지 자체는 RectTransform으로 생성하지만, 실제 생성해서 사용해야 하는 캐릭터 프리팹의 경우, 이와 같이 Transform으로 되어 있는 것을 확인할 수 있었다. 이런 상황이라면, 캐릭터를 직접적으로 UI에 띄우는 것은 어려워 보인다.
따라서 다른 방법으로 생각한 것이 게임 오브젝트를 Instantiate 시킨 다음, 이를 Render Texture로 보이게 하는 것이다.
방법은 다음과 같다.
SPUM 캐릭터의 모습을 담게 할 Render Texture를 생성한다. 이때 size는 512 * 512로 설정했다.
다음으로 로비 씬에 SPUM 캐릭터를 촬영할 전용 카메라를 만들고, Output Texture에 아까 만든 Render Texture를 넣는다. 여기서, Background Type을 Solid Color로 설정하고, background에 대해 세부 설정을 할 수도 있다.
알파 값을 0으로 설정하면 원하는 대상에 대한 촬영을 하면서 배경이 안나오게(투명하게) 처리할 수 있다.
이와 같이 세팅을 한 후에 카메라로 적절히 각도를 맞춘다. 여기서 나는 최대한의 효율을 위해, 다섯 명의 캐릭터가 등장할 수 있는 하나의 공간처럼 카메라로 촬영했다.
이제 Raw Image를 만들고, 설정해 둔 Render Texture를 넣어준다. 그러면 이제 이 사진에서는 SPUM 캐릭터의 라이브 영상을 출력할 것이다.
이 부분에 대해서는 한 번 더 생각할 필요성이 있는 것이, 캐릭터를 Instantiate 했다가 Destroy하는 방식은 GC와 메모리 할당 비용이 커서 성능상 저하를 일으킬 것이라는 점이다. 따라서 이런 낭비를 막기 위해서 할 수 있는 방법을 생각해보았다.
오브젝트 풀을 적용시켜야 한다는 점에 대해선 생각하긴 했지만, 어떻게 쓸 것인가에 대해서도 생각해 보아야 한다. 캐릭터를 5개만 생성하면 된다지만, 이 게임의 캐릭터 개수는 36개로 기획되어 있다. 36개 중에 어떤 캐릭터를 편성할 지 모르는 상황에서 36개의 캐릭터를 모두 생성해놓는 방식은 메모리상 낭비가 될 수밖에 없다. 따라서, 다음과 같은 방식을 선택했다.
이미 다른 사람이 만들어 둔 풀 매니저를 활용한 것이기도 하지만, 효율상 가장 좋은 방식은 풀에 저장되어 있는지 확인하고 없으면 새로 생성한 다음 풀에다 저장하면 된다. 이 방식으로 캐릭터를 생성하여 풀에 저장하는 방식을 사용하면, 처음 생성할 때의 부하를 제외하고선 그나마 제일 효율성이 좋은 방법이 될 것이다.
시너지의 이미지가 정상 표기되지 않는 오류가 있었다. 그 사이 시너지 구조를 바꾼다는 소리를 들었지만, 컴파일 에러 같은 건 뜨지 않았는데 원인을 찾아봐야 할 것 같았다.
그런데 디버깅을 해 봤을 때, 아이콘이 null로 뜨는 문제를 확인했다. 그래서 시너지 번호를 잘못 추적하고 있나 로그를 찍어봤는데 시너지는 막상 잘 찾고 있었다. 근데 그러면 왜 아이콘을 못 찾는 걸까? 오류가 뜨는 것도 아닌데 말이다.
원인은 정말 단순하면서도 어이가 없었다. 그냥 단순하게 시너지를 만든 담당자가 아이콘을 넣지 않은 것이다.
진작에 데이터를 전부 확인해볼 걸 그랬다. 아이콘이 들어가 있지 않을 거란 생각을 아예 하지 못했다 보니, 계속 뭐가 문제인지 확인이 되지도 않고 삽질을 하고 있었던 것이다. 분명 시너지 구조를 다 살펴보면서 어느 정도 파악을 했고, 코드 상 아무런 문제도 없어 보이는데 아이콘이 뜨지 않으니 얼마나 꼬인 건가 싶었는데. 이런 원인이었던 걸로 밝혀진 게 오히려 다행이라고나 해야 할까. 어쨌든 버그의 원인은 찾아서 다행이다.
임의로 아무 아이콘이나 넣어봤는데 잘 적용되는 모습이다.