O dia em que nossos shaders sumiram da build
No editor do Unity, tudo parecia perfeito. Na build final: superfícies rosa e efeitos faltando. Bem-vindo a uma das armadilhas mais chatas do Unity — e a algumas parentes dela.
Shader stripping. Ao compilar, o Unity joga fora tudo que aparentemente não é necessário — inclusive shaders. O problema: se você carrega shaders em tempo de execução via Shader.Find() (como fazemos com nossos mais de 20 shaders personalizados para água, atmosfera, hologramas e mais), o Unity não vê nenhuma referência a eles em nenhuma cena. Resultado: o shader existe no editor e some na build. A solução é pouco espetacular, mas essencial: cada um desses shaders precisa entrar na lista Always Included Shaders das configurações gráficas. Desde então, nossa regra é: shader novo? Adicione na hora.
A camada que era -1. Categoria parecida: resolvemos uma camada de física no código pelo nome. No editor: funciona. Na build em lote no servidor de build: a camada não existe, a busca retorna -1, e tudo que depende dessa camada se comporta errado em silêncio. Desde então referenciamos camadas pelo índice fixo, não pelo nome.
A moral da história: O editor do Unity e a build final são dois mundos diferentes. O editor é misericordioso — tem todos os assets, todos os nomes, todos os shaders à mão. A build é implacável. Por isso, aqui, toda mudança no cliente vem com um teste de build local de verdade, não só o botão Play do editor. Demora mais. Mesmo assim, nos poupou de muitos lançamentos vergonhosos.
Comentários