c# - 使用 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);
但大多数时候它仍然不起作用。有时它可以工作并且箭头是绿色的,有时它会保持默认材质的颜色。我似乎找不到有效的实例和无效的实例之间的任何区别,这让我整天发疯,任何建议将不胜感激!
我预计箭头会变成绿色,但它只是有时会这样,我没有收到任何错误消息,检查员说材料是绿色的,但在游戏视图和场景视图中它不是
解决方案
找了几天终于找到了!感谢https://stackoverflow.com/a/54008057/11829883
因为箭头主体是箭头模型的子模型,它是实际箭头预制件的子模型,所以我不得不GetChild(0)
在该对象上调用两次 - 由于某种原因GetComponentInChildren
无法正常工作,所以我认为这不是问题
这是修复它的代码行:
new_c.transform.GetChild(0).GetChild(0).GetComponent<MeshRenderer>().material.color = Color.yellow;
推荐阅读
- ruby-on-rails - 在 Rails 中为每个 GET 请求附加一个参数
- javascript - Javascript - 编写 js 插件时如何构建最小文件
- c++ - C++ 程序在迭代中变慢
- api - 如何根据窗口标题栏结束进程?
- python - pyGithub最大使用API调用率
- python - 使用 multiprocess.Process 创建进程以并行操作多个生成器,而不首先列出列表
- javascript - JS和正则表达式用于替换double = mark内的所有内容
- regex - 用于删除“|”的 Google Apps 脚本正则表达式 单引号,管道,单引号 - 导致超时
- javascript - Laravel Mix / Webpack:当我调用“npm run prod”时,它不会缩小 .scripts 但会缩小 .js
- c++11 - 使用接受 lambda 的模板函数重载