我有一个游戏对象,有多个材料(数3-4),我想设置所有这些材料的颜色相同。我该怎么做?
myObj.material.SetColor("_Color", Color.red);
发布于 2022-07-26 12:37:28
有.material,但也有.materials
Material[] materials = myObj.materials;
for(int i = 0; i < materials.Length; i++)
{
materials[i].SetColor("_Color", Color.red);
}
myObj.materials = materials;
正如@derHugo所指出的,如果你毁坏了物体,就需要清理这些材料,就像在OnDestroy中那样
如果要将颜色更改应用于使用这些材料的all对象,则sharedMaterial是您的朋友(与在检查器中编辑材料的行为相同):
Material[] sharedMaterials = myObj.sharedMaterials;
for(int i = 0; i < sharedMaterials.Length; i++)
{
sharedMaterials[i].SetColor("_Color", Color.red);
}
myObj.sharedMaterials = sharedMaterials;
相同的过程,但您不需要清理,但它会更改所有实例。
还有一些MaterialPropertyBlocks是有用的,特别是结合DrawMeshInstanced (当你想要一堆不同颜色的物体时)。
https://stackoverflow.com/questions/73123451
复制相似问题