首页 > 解决方案 > 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);

这也不起作用,正在设置材质(进入场景编辑器并查看对象属性显示正确的材质),但对象没有改变颜色,而是保持其默认值。但是,在资产文件夹中获取材质并手动将其拖动到场景编辑器中的对象确实有效。我不确定我在这里做错了什么,所以任何帮助将不胜感激!

编辑:这是我正在谈论的一些图片

检查器中的对象(材料更改后):

场景中的物体:

材料特性:

标签: c#unity3d

解决方案


GarrotJohnson 和 derHugo 让我了解了问题所在。事实证明,我使用的每个对象都有一个子对象(由于某种原因称为“默认”),它有自己的网格渲染器和默认材质。获取此子对象 (GameObject.transform.GetChild(0)) 并更改该材质有效。


推荐阅读