通过脚本向游戏对象分配多种材质?

时间:2019-06-26 09:11:24

标签: c# unity3d

如何通过c#脚本将多种材料分配给游戏对象?

到目前为止,我尝试过的是:

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

3 个答案:

答案 0 :(得分:1)

您不能直接更新材料,但是需要创建一个新的材料阵列并进行分配。

project

您也可以选中documentation

  

请注意,就像Unity返回的所有数组一样,这将返回的副本   材料阵列。如果要更改其中的某些材料,请获取   值,更改条目并放回材料。

答案 1 :(得分:1)

从文档中:

  

请注意,就像Unity返回的所有数组一样,这将返回物料数组的副本。如果要更改其中的某些物料,请获取值,更改条目并重新设置物料。

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

答案 2 :(得分:1)

如果要更改多种材料,则需要更改整个阵列。 因此,您首先创建与当前渲染器长度相同的材质数组:

Material[] newMaterials = renderer.sharedMaterials;
for(int i = 0; i <newMaterials.Length; i++)
{
newMaterials[i] = theMaterialYouWantToSetX;
}

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

renderer.materials = newMaterials;