2025
05.08

 

서론

유니티에서 어드레서블을 사용하는 경우

일반적으로 시작 씬은 어드레서블에 등록하지 않고 나머지 씬과 에셋만 어드레서블로 등록하여 관리한다.

이 방식에서는 시작씬에서 어드레서블로 씬과 에셋을 로딩하는 방식으로 구현하게 된다.

 

그런데 어느 시점에 빌드를 해보니 빌드시 Shader Variant가 수십만개를 생성하는 문제가 발생했고,

빌드 시간이 5분에서 2시간 이상으로 증가했다.

빌드 크기는 260MB에서 600MB로 증가했다. 이 중 URP Lit는 188MB 나 되는 크기가 되었다.

 

원인은?

이번 프로젝트는 Full 3D인데, 아직 시작씬에 넣을 타이틀 이미지가 없어서

프로토이기도 하고, 임시로 3D 배경 오브젝트의 프리팹을 어드레서블이 아닌 시작씬에 배치했고, 이게 화근이 되었다.

 

어드레서블로 지정된 프리팹의 경우 약한 참조를 가지며, 언제든 업데이트가 되어 다른 에셋으로 교체가 가능하다.

유니티는 이를 고려하여 한건지 어드레서블이 아닌 씬에 어드레서블이 프리팹이 참조된 경우 내부에서 어떤 쉐이더를 사용했는지는 알고 있지만 어떤 키워드의 배리언트를 사용했는지는 파악하지 못하는 듯하다.

 

때문에 가능한 모든 배리언트를 빌드시생성해두는 것.

 

해결

- 비 어드레서블 씬에서 어드레서블 배경 프리팹을 직접 포함하지 말자.

- 어드레서블 프리팹이 필요하다면 씬에 직접 포함하지말고 시작한 뒤에 어드레서블 시스템을 통해 불러오자.

 

 

비슷한 현상 참고글

https://discussions.unity.com/t/addressable-and-shader-variants/841836?utm_source=chatgpt.com