빌드에서 셰이더가 사라진 날
Unity 에디터에서는 모든 게 완벽했어요. 완성된 빌드에서는 분홍색 표면에 사라진 효과들이 나왔죠. 가장 고약한 Unity 함정 중 하나, 그리고 그 친척들 몇 가지를 소개할게요.
셰이더 스트리핑. 빌드할 때 Unity는 필요 없어 보이는 건 전부 내던져요. 셰이더도 포함해서요. 문제는 Shader.Find()로 런타임에 셰이더를 불러오면(물, 대기, 홀로그램 등에 쓰는 20개가 넘는 커스텀 셰이더가 그래요) Unity가 어떤 씬에서도 참조를 찾지 못한다는 거예요. 결과적으로 셰이더가 에디터에는 있고 빌드에서는 없어요. 해결책은 평범하지만 꼭 필요해요. 이런 셰이더는 전부 그래픽 설정의 Always Included Shaders 목록에 넣어야 해요. 그 뒤로 우리의 규칙은 이거예요. 새 셰이더? 바로 추가!
-1이었던 레이어. 비슷한 종류예요. 코드에서 이름으로 물리 레이어를 찾았거든요. 에디터에서는 잘 돼요. 빌드 서버의 배치 빌드에서는 그 레이어가 없어서 조회 결과가 -1이 되고, 그 레이어에 의존하는 모든 것이 조용히 이상하게 동작해요. 그 뒤로는 레이어를 이름이 아니라 고정된 인덱스로 참조해요.
교훈: Unity 에디터와 완성된 빌드는 서로 다른 세계예요. 에디터는 너그러워요. 모든 에셋, 모든 이름, 모든 셰이더가 손닿는 곳에 있으니까요. 빌드는 냉정해요. 그래서 우리는 클라이언트를 바꿀 때마다 에디터의 재생 버튼만 누르지 않고 실제 로컬 빌드 테스트를 해요. 시간은 더 걸려요. 그래도 부끄러운 릴리스를 여러 번 막아 줬어요.
댓글