De dag dat onze shaders uit de build verdwenen
In de Unity-editor zag alles er perfect uit. In de afgewerkte build: roze oppervlakken en ontbrekende effecten. Welkom bij een van de gemeenste Unity-valkuilen – en een paar verwanten.
Shader stripping. Bij het bouwen gooit Unity alles weg wat blijkbaar niet nodig is – ook shaders. Het probleem: als je shaders tijdens runtime laadt via Shader.Find() (zoals wij doen met onze ruim 20 eigen shaders voor water, atmosfeer, hologrammen en meer), ziet Unity in geen enkele scene een verwijzing ernaar. Gevolg: de shader is er in de editor en weg in de build. De oplossing is niet spectaculair maar essentieel: elk van deze shaders moet in de lijst Always Included Shaders in de graphics-instellingen. Sindsdien geldt bij ons de regel: nieuwe shader? Meteen toevoegen.
De laag die -1 was. Vergelijkbare categorie: we bepaalden een physics-laag in code op naam. In de editor: werkt. In de batchbuild op de buildserver: de laag bestaat niet, de opzoeking geeft -1 terug en alles wat op die laag gebaseerd is, gedraagt zich stilletjes verkeerd. Sindsdien verwijzen we naar lagen met hun vaste index, niet met hun naam.
De moraal: De Unity-editor en de afgewerkte build zijn twee verschillende werelden. De editor is genadig – hij heeft alle assets, alle namen, alle shaders bij de hand. De build is meedogenloos. Daarom hoort bij elke wijziging aan de client bij ons een echte lokale buildtest, niet alleen de Play-knop in de editor. Het kost meer tijd. Het heeft ons toch al veel gênante releases bespaard.
Opmerkingen