需求:3D对象身上存在多个材质球,将其进行替换为需要材质球


解答:
public class ObjectMatHightLight : MonoBehaviour
{
Material _redMat; //需要替换的材质球,此处只写了一个
Material[] matArray; //存放对象身上材质球数组
Material[] TsetArray ; //存放需要替换的材质球数组
private void Awake()
{
//需要替换的材质球(存放在Resources文件夹下),可根据需求自行增加
_redMat = Resources.Load<Material>("RedMat");
matArray = transform.GetComponent<MeshRenderer>().materials;//拿到对象身上的所有材质球
}
void Start()
{
TsetArray = new Material[matArray.Length];
for (int i = 0; i < matArray.Length ; i++)
{
TsetArray[i] = _redMat; //将需要替换的材质球存放在创建好的数组内
}
}
void Update()
{
//按下W进行测试
if (Input.GetKeyDown (KeyCode.W ))
{
transform.GetComponent<MeshRenderer>().materials= TsetArray;
}
}
}
测试过程遇到问题:有一种写法是这样
transform.GetComponent<MeshRenderer>().materials[i]=_redMat; 发现这样没有作用,至于具体原因不太清楚,所以采用上述方法,将存放材质的数组赋予GetComponent<MeshRenderer>().materials
若对象只有一个材质则可采用下述方法:
ransform.GetComponent<MeshRenderer>().material=_redMat;
版权声明:本文为Monkey_Xuan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。