Il giorno in cui i nostri shader sparirono dalla build
Nell'editor di Unity era tutto perfetto. Nella build finita: superfici rosa ed effetti mancanti. Benvenuti in una delle trappole più cattive di Unity, e in alcune sue parenti.
Shader stripping. Durante la build Unity butta via tutto ciò che apparentemente non serve, shader compresi. Il problema: se carichi gli shader a runtime con Shader.Find() (come facciamo noi con più di 20 shader personalizzati per acqua, atmosfera, ologrammi e altro), Unity non vede nessun riferimento a essi in alcuna scena. Risultato: lo shader c'è nell'editor e sparisce nella build. La soluzione è poco spettacolare ma essenziale: ognuno di questi shader va messo nella lista Always Included Shaders nelle impostazioni grafiche. Da allora da noi la regola è: nuovo shader? Aggiungilo subito.
Il layer che era -1. Categoria simile: avevamo risolto un layer di fisica nel codice tramite il suo nome. Nell'editor: funziona. Nella build batch sul server di build: il layer non esiste, la ricerca restituisce -1 e tutto ciò che si basa su quel layer si comporta male in silenzio. Da allora referenziamo i layer tramite il loro indice fisso, non per nome.
La morale: l'editor di Unity e la build finita sono due mondi diversi. L'editor è clemente: ha a portata di mano tutti gli asset, tutti i nomi, tutti gli shader. La build è spietata. Per questo da noi ogni modifica al client si accompagna a un vero test di build in locale, non solo al pulsante Play nell'editor. Ci vuole più tempo. Ma ci ha comunque risparmiato molti rilasci imbarazzanti.
Commenti