通过脚本给游戏对象分配多个材质?

3

我该如何通过C#脚本为一个游戏对象分配多个材质?

到目前为止我尝试过的方法有:

public GameObject go;
public Material Mat1;
public Material Mat2;
void Start()
{ 
     //this does not work
     go.GetComponent<Renderer>().materials[0] = Mat1; 
}
3个回答

1
您不能直接更新材料,但需要创建一个新的材料数组并进行赋值。
void Start()
    {
        //create your materials
        var yourMaterials = new Material[] { Mat1, Mat2 };
        //assign it
        go.GetComponent<Renderer>().materials = yourMaterials ;
    }

您还可以查看文档

请注意,像Unity返回的所有数组一样,这将返回材质数组的副本。如果您想更改其中的一些材料,请获取该值,更改一个条目,然后将材料设置回去。


1
同样在Unity Answers上,以防6分钟内出现3个相同类型的答案还不够:)。 - Jack Mariani

1

从文档中得知:

请注意,与Unity返回的所有数组一样,这也返回材质数组的副本。如果您想更改其中的一些材料,请获取该值,更改条目并将材料设置回去。

Renderer rend = go.GetComponent<Renderer>();
Material [] mats = rend.materials;
mats[0] = Mat1;
rend.materials = mats;

1
如果您想更改多个材质,您需要更改整个数组。因此,您首先需要创建一个与当前渲染器长度相同的材质数组:
Material[] newMaterials = renderer.sharedMaterials;
for(int i = 0; i <newMaterials.Length; i++)
{
newMaterials[i] = theMaterialYouWantToSetX;
}

然后将数组分配给渲染器:

renderer.materials = newMaterials;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接