我尝试在运行时根据我选择的标签更改对象的材质。然而,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;
}
2条答案
按热度按时间67up9zun1#
试试这个扩展方法
则可以使用
这里是另一个改变颜色的扩展方法
**编辑:**在gameObject上找到了我以前支持多材质的扩展方法
最后,为了更具体地说明您的问题,这里有一个最后的函数
你可以这样称呼它:
8mmmxcuj2#
好吧,这是我试图避免的代码类型。因为我需要更改许多游戏对象(超过100个)使用的纹理,我不想只是循环遍历所有这些对象,这将是非常资源密集型的。相反,我希望有一个解决方案来更改资源中的实际纹理,保持所有渲染器引用该纹理,但更改纹理
该代码需要在运行时运行,而不是在编辑时运行,我没有UnityEditor的访问权限。我想在游戏编译和运行后从脚本更改纹理。我将替换的纹理将从外部文件加载。