首页 > 解决方案 > 使用 ac#script 更改预制件的颜色时,它会显示在检查器中,但不会显示在游戏视图中

问题描述

我想在运行时创建一个预制件并能够为其分配颜色。当我的预制件是一个简单的圆柱体时,这一切都可以正常使用:

var renderer = new_c.GetComponent<MeshRenderer>();
renderer.material.color = Color.green;

但是当我用我的箭头预制件(一个导入的对象)尝试它时,颜色会出现在检查器中,但不会出现在预制件实例的游戏视图中。

我认为这可能与在层次结构中,箭头的主体是预制件的子级这一事实有关,但我不确定?我试过打电话:

new_c.GetComponentInChildren<GameObject>().GetComponent<MeshRenderer>().material.color = Color.green;

new_c.GetComponent<Renderer>().material.SetColor("_Color", Color.green);

GetCompentsInChildren<Meshrenderer>.material.SetColor("_Color", Color.green);

但大多数时候它仍然不起作用。有时它可以工作并且箭头是绿色的,有时它会保持默认材质的颜色。我似乎找不到有效的实例和无效的实例之间的任何区别,这让我整天发疯,任何建议将不胜感激!

我预计箭头会变成绿色,但它只是有时会这样,我没有收到任何错误消息,检查员说材料是绿色的,但在游戏视图和场景视图中它不是

图片显示材料为绿色的检查器窗口和箭头仍为默认材料颜色的游戏视图

标签: c#unity3d

解决方案


找了几天终于找到了!感谢https://stackoverflow.com/a/54008057/11829883

因为箭头主体是箭头模型的子模型,它是实际箭头预制件的子模型,所以我不得不GetChild(0)在该对象上调用两次 - 由于某种原因GetComponentInChildren无法正常工作,所以我认为这不是问题

这是修复它的代码行:

new_c.transform.GetChild(0).GetChild(0).GetComponent<MeshRenderer>().material.color = Color.yellow;

推荐阅读