En tant que solution alternative à dupliquer le matériau (qui empêche les baleines de batching!), Vous pouvez utiliser MaterialPropertyBlock
s.
Ils sont généralement assez faciles à utiliser. Dans un nouveau script, vous créez un MaterialPropertyBlock, définissez la couleur à la couleur que vous voulez que l'objet possède et affectez le MaterialPropertyBlock au rendu de l'objet.
MaterialPropertyBlock.SetColor() a un exemple de travail, bien que les appels Draw ne sont pas nécessaires (c'est un exemple trop d'ingénierie). Cela suffit:
Start() {
MaterialPropertyBlock mpb = new MaterialPropertyBlock();
mpb.SetColor("_MainColor", new Color(1,0,0));
gameObject.GetComponent<MeshRenderer>().SetPropertyBlock(mpb);
}
Résultats:
Cela finit par être plus efficace à long terme, comme vous pouvez faire des choses très complexes avec les shaders, ont tous les objets utilisent le même matériau unique, mais tous ont leur propre look unique, et la vitesse de rendu ne souffre pas. La partie dure est la détermination des noms des propriétés dans le shader que vous souhaitez modifier. Et bien sûr, les résultats n'apparaissent que lorsqu'ils sont exécutés en mode Lecture (sauf si vous marquez la classe par [ExecuteInEditMode]
).
C'est une façon assez chouette que je n'ai jamais rencontrée auparavant. – Everts
@Everts Oh oui, c'est super soigné. – Draco18s