top of page

Dzień, w którym z buildu zniknęły nasze shadery

Zdjęcie autora: Marcel Dütscher
Marcel Dütscher
27 cze
1 minut(y) czytania

W edytorze Unity wszystko wyglądało idealnie. W gotowym buildzie: różowe powierzchnie i brakujące efekty. Witajcie w jednej z najparszywszych pułapek Unity – i kilku jej krewnych.


Shader stripping. Przy budowaniu Unity wyrzuca wszystko, co pozornie nie jest potrzebne – w tym shadery. Problem: jeśli ładujesz shadery w czasie działania przez Shader.Find() (tak jak my z ponad 20 własnymi shaderami do wody, atmosfery, hologramów i nie tylko), Unity nie widzi żadnego odniesienia do nich w żadnej scenie. Skutek: shader jest w edytorze, a w buildzie go nie ma. Rozwiązanie jest mało efektowne, ale konieczne: każdy z tych shaderów musi trafić na listę Always Included Shaders w ustawieniach grafiki. Od tamtej pory u nas obowiązuje reguła: nowy shader? Dodaj go od razu.


Warstwa, która była -1. Podobna kategoria: rozwiązywaliśmy w kodzie warstwę fizyki po jej nazwie. W edytorze: działa. W buildzie wsadowym na serwerze budującym: warstwa nie istnieje, wyszukiwanie zwraca -1, a wszystko oparte na tej warstwie po cichu zachowuje się źle. Od tamtej pory odwołujemy się do warstw przez ich stały indeks, nie przez nazwę.


Morał: Edytor Unity i gotowy build to dwa różne światy. Edytor jest łaskawy – ma pod ręką wszystkie zasoby, wszystkie nazwy, wszystkie shadery. Build jest bezlitosny. Dlatego u nas każda zmiana w kliencie przechodzi prawdziwy lokalny test buildu, a nie tylko przycisk Play w edytorze. Trwa to dłużej. Mimo to uratowało nas to przed wieloma wstydliwymi wydaniami.

Ostatnie posty

Zobacz wszystkie

Komentarze


Komentowanie tego posta nie jest już dostępne. Skontaktuj się z właścicielem strony, aby uzyskać więcej informacji.
bottom of page