unity 对象存在多个材质球进行替换

需求: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版权协议,转载请附上原文出处链接和本声明。