我正在尝试根据我选择的标签在运行时更改对象的材质。但是,Unity不是替换材质,而是添加目标材质的实例并将其添加到对象中。
我是否可以通过代码删除现有资料并将其替换为目标材料?
这是我目前处理此问题的代码:
if(hit.collider.gameObject.tag == "Colour1")
{
GameObject[] _Colums = GameObject.FindGameObjectsWithTag("column");
foreach( GameObject c in _Colums)
c.renderer.material.color = hit.collider.gameObject.renderer.material.color;
}
答案 0 :(得分:1)
尝试此扩展方法
public static void ChangeMaterial(this GameObject go, Material mat)
{
go.renderer.material = mat;
}
然后你可以使用
来调用它if(hit.collider.gameObject.tag == "Colour1")
{
hit.gameObject.renderer.material.ChangeMaterial( Your Material );
}
这是另一种更改颜色的扩展方法
public static void ChangeColor(this Material mat, Color color)
{
mat.SetColor("_Color", color);
}
编辑:在gameObject上找到支持多种素材的旧扩展方法
public static void ChangeColor(this GameObject go, Color color)
{
if(go.GetComponent<MeshRenderer>())
{
Material[] materials = go.gameObject.renderer.materials;
foreach(Material m in materials)
{
m.SetColor("_Color", color);
}
}
}
最后,为了更具体地解决您的问题,这是您的最后一项功能
public static void ChangeColor(GameObject[] gameObjects, Color color)
{
foreach(GameObject gameObject in GameObjects)
{
gameObject.renderer.material.ChangeColor( "Your Color" );
}
}
然后你可以这样称呼它:
if(hit.collider.gameObject.tag == "Colour1")
{
GameObject[] _Colums = GameObject.FindGameObjectsWithTag("column");
ChangeColor(_Colums, "Your Color");
}