XR플밍 - 12. UnityEngine3D Reactive 프로그래밍 - 기업협약 프로젝트 19일차 (9/11)

이형원·2025년 9월 11일
0

XR플밍

목록 보기
193/215

1. 금일 한 업무 정리

  • 전체적인 로비 씬에 대한 폴리싱 작업
  • 캐릭터 편성 시스템의 연출 변경 -> SPUM 캐릭터의 라이브 모션을 띄울 수 있도록 함.

2. 문제의 발생과 해결 과정

2.1 SPUM 캐릭터를 직접 UI에 띄우기

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와 메모리 할당 비용이 커서 성능상 저하를 일으킬 것이라는 점이다. 따라서 이런 낭비를 막기 위해서 할 수 있는 방법을 생각해보았다.

1. 오브젝트 풀을 사용하자. 하지만 모든 캐릭터를 생성하기에는 너무 낭비 아닌가?

오브젝트 풀을 적용시켜야 한다는 점에 대해선 생각하긴 했지만, 어떻게 쓸 것인가에 대해서도 생각해 보아야 한다. 캐릭터를 5개만 생성하면 된다지만, 이 게임의 캐릭터 개수는 36개로 기획되어 있다. 36개 중에 어떤 캐릭터를 편성할 지 모르는 상황에서 36개의 캐릭터를 모두 생성해놓는 방식은 메모리상 낭비가 될 수밖에 없다. 따라서, 다음과 같은 방식을 선택했다.

2. 오브젝트 풀을 생성해놓는다. 다만 빈 상태로, 필요할 때만 Instantiate 해놓고 넣어두기

이미 다른 사람이 만들어 둔 풀 매니저를 활용한 것이기도 하지만, 효율상 가장 좋은 방식은 풀에 저장되어 있는지 확인하고 없으면 새로 생성한 다음 풀에다 저장하면 된다. 이 방식으로 캐릭터를 생성하여 풀에 저장하는 방식을 사용하면, 처음 생성할 때의 부하를 제외하고선 그나마 제일 효율성이 좋은 방법이 될 것이다.

2.2 시너지의 표기 오류, 그리고 결과는 삽질.

시너지의 이미지가 정상 표기되지 않는 오류가 있었다. 그 사이 시너지 구조를 바꾼다는 소리를 들었지만, 컴파일 에러 같은 건 뜨지 않았는데 원인을 찾아봐야 할 것 같았다.

그런데 디버깅을 해 봤을 때, 아이콘이 null로 뜨는 문제를 확인했다. 그래서 시너지 번호를 잘못 추적하고 있나 로그를 찍어봤는데 시너지는 막상 잘 찾고 있었다. 근데 그러면 왜 아이콘을 못 찾는 걸까? 오류가 뜨는 것도 아닌데 말이다.

원인은 정말 단순하면서도 어이가 없었다. 그냥 단순하게 시너지를 만든 담당자가 아이콘을 넣지 않은 것이다.

진작에 데이터를 전부 확인해볼 걸 그랬다. 아이콘이 들어가 있지 않을 거란 생각을 아예 하지 못했다 보니, 계속 뭐가 문제인지 확인이 되지도 않고 삽질을 하고 있었던 것이다. 분명 시너지 구조를 다 살펴보면서 어느 정도 파악을 했고, 코드 상 아무런 문제도 없어 보이는데 아이콘이 뜨지 않으니 얼마나 꼬인 건가 싶었는데. 이런 원인이었던 걸로 밝혀진 게 오히려 다행이라고나 해야 할까. 어쨌든 버그의 원인은 찾아서 다행이다.

임의로 아무 아이콘이나 넣어봤는데 잘 적용되는 모습이다.

3. 개선점 및 과제

3.1 시너지 활성화 UI 구성

3.2 CBT 빌드본 제출 준비(D-Day)

3.3 UI 폴리싱

3.4 리팩토링

profile
게임 만들러 코딩 공부중

0개의 댓글