Unity :5.1.1f1
郎:C#
我正在尝试将GameObject设置为透明渲染模式。它在编辑器模式下完美运行,但在windows build中没有任何作用。
这就是我正在做的事情:
// make object semitransparent
Material m = transform.parent.GetComponent<Renderer>().material;
Color color = m.color;
color.a = 0.5f;
m.SetFloat("_Mode", 3f);
m.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
m.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
m.EnableKeyword("_ALPHABLEND_ON");
m.renderQueue = 3000;
m.SetColor("_Color", color);
¿为什么在Windows Build中不起作用?
答案 0 :(得分:1)
并非所有平台都是一对一的,您创建的材质的Alpha是对根对象材质的引用并使用其特定着色器。检查您已应用于材质的Shader,以找出Alpha无法正常工作的原因。
我还会使用Edit&gt;确保着色器包含在您构建的项目中。项目设置&gt;图形设置(Unity 5)。在此处,请确保“始终包含着色器”包含您为材质指定的着色器。
作为一个FYI:对于移动设备,我已经做了一些延迟测试并发现Legacy&gt;透明&gt;与使用透明渲染模式的标准相比,漫反射在移动设备上更可靠,更快。但你的里程可能会有所不同。
答案 1 :(得分:0)
在尝试在运行时设置透明材质时,我也遇到了这个问题。
另一种选择是事先创建透明材质并将其放在Resources文件夹中,然后使用Material复制构造函数实例化副本并更新其属性,如下所示:
Material native;
if (myMaterialDescription.transparency != 0)
{
native = new Material(Resources.Load<Material>("ReferenceTransparent"));
}
else
{
native = new Material(Resources.Load<Material>("ReferenceOpaque"));
}
myMaterialDescription.diffuseColour.a = 1 - myMaterialDescription.transparency;
native.SetColor("_Color", myMaterialDescription.diffuseColour);
(Unity 5.2.0f3)