2017-09-20 5 views
0

J'aimerais faire une couleur de baleine différente.Problèmes Unity FBX

on cette peau rendu, et d'autres serait un autre.

mais lorsque je tente de modifier la couleur, deux couleurs sont changées-les en même temps.

leur peau suit la dernière.

que dois-je faire?

enter image description here

Répondre

4

Afin d'optimiser le rendu, lorsque deux objets identiques utilisent le même matériau ou un treillis, il est en fait la même instance qui est utilisé. Simplement, vos deux baleines utilisent le même matériel. C'est pour économiser des appels de tirage.

Alors, quand vous changez, il change pour les deux.

La solution consiste à dupliquer le matériel et l'assigner à l'un d'eux. Maintenant, vous pouvez en changer un sans affecter l'autre. Vous avez également ajouté un appel de tirage supplémentaire.

3

En tant que solution alternative à dupliquer le matériau (qui empêche les baleines de batching!), Vous pouvez utiliser MaterialPropertyBlocks.

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:

Only one material

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]).

+0

C'est une façon assez chouette que je n'ai jamais rencontrée auparavant. – Everts

+0

@Everts Oh oui, c'est super soigné. – Draco18s