1

我正在尝试根据我选择的标签在运行时更改对象的材质。但是,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;
}
4

1 回答 1

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);      
}

编辑:在游戏对象上找到了支持多材质的旧扩展方法

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");
}
于 2013-10-21T17:22:49.417 回答