c# - Unity3D 材质不显示,但设置正确
问题描述
我正在尝试动态加载一个对象,并根据从某人计算机上的文件中获取的每个子对象的状态为每个子对象着色。
加载对象很好,并且正在设置材质,但是当游戏运行时,这种着色在场景中不起作用。我这样做是这样的:
grandchild.GetComponent<Renderer>().material.EnableKeyword("_NORMALMAP");
grandchild.GetComponent<Renderer>().material.SetColor("_Color", Color.yellow);
查看场景时,这种颜色是不可见的(对象颜色与其原始颜色相同。然后我决定尝试将材质本身更改为这样的颜色:
grandchild.GetComponent<Renderer>().material = (Material)Resources.Load("YellowMaterial", typeof(Material);
这也不起作用,正在设置材质(进入场景编辑器并查看对象属性显示正确的材质),但对象没有改变颜色,而是保持其默认值。但是,在资产文件夹中获取材质并手动将其拖动到场景编辑器中的对象确实有效。我不确定我在这里做错了什么,所以任何帮助将不胜感激!
编辑:这是我正在谈论的一些图片
检查器中的对象(材料更改后):
场景中的物体:
解决方案
GarrotJohnson 和 derHugo 让我了解了问题所在。事实证明,我使用的每个对象都有一个子对象(由于某种原因称为“默认”),它有自己的网格渲染器和默认材质。获取此子对象 (GameObject.transform.GetChild(0)) 并更改该材质有效。
推荐阅读
- python - 构建python包:如何在包的主脚本中调用非代码文件
- python - 如何在 Python 中计算 s 字符串的权重?
- json - 如何更新 React js 中嵌套对象的状态,在我的示例中是 DeviceProperties(IPAddress、用户名和密码)
- c++ - 低质量 H.265 媒体基础编码?
- image - 可缩放的 xamarin 圆形图像
- java - 微调器 onItemSelectedListener 不起作用?
- firebase - Unity:在 DynamicLinkReceived 回调事件中接收 Firebase 短动态链接
- jenkins - 如何在詹金斯管道 groovy 文件中使用 withcredentials 设置多个凭据
- flutter - 如何在颤动中呈现多个键值对的静态列表
- excel - 使用 VBA 从 Excel 中打开 Word Doc 以查找日期文本并将其替换为 Excel 中单元格中的日期文本