透明渲染模式在Windows构建中不起作用

时间:2015-07-15 18:36:51

标签: c# unity3d transparency alpha

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中不起作用?

2 个答案:

答案 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)