【问题标题】:Unity 5 custom shader broken after upgrade from Unity 4.x从 Unity 4.x 升级后 Unity 5 自定义着色器损坏
【发布时间】:2015-06-26 04:56:37
【问题描述】:

我在 iOS 上调试 Unity 应用时遇到了一些问题。有一个在屏幕上画线的功能,它使用自定义着色器。我得到的错误是:

NullReferenceException
  at UnityEngine.Material..ctor (UnityEngine.Shader shader) [0x00000] in <filename unknown>:0 
  at Drawable.InitColor (Color lineColour) [0x00039] in /Users/.../Drawable.cs:269 

Drawable.cs 中的第 269 行是:

mLineRenderer.material = new Material(Shader.Find("Custom/LineRender"));

着色器代码如下:

Shader "Custom/LineRender" 
{
    Properties {
    _Color ("Color", Color) = (1.0, 1.0, 1.0, 1.0)
    }

SubShader {
    Tags { "RenderType" = "Transparent" "Queue" = "Transparent" }
    Blend SrcAlpha OneMinusSrcAlpha
    Cull Off
    LOD 200
    Pass{
        CGPROGRAM
        #pragma surface surf Lambert

        fixed4 _Color;
        struct Input {
          float2 uv_MainTex;

        };

        void surf (Input IN, inout SurfaceOutput o) {

          o.Albedo = _Color.rgb;
          o.Emission = _Color.rgb; // * _Color.a;
          o.Alpha = _Color.a;
        } 
     ENDCG
    }
  }
} 

我对着色器了解不多,所以我不确定这里发生了什么。但它在 Unity 4.6 中有效,现在在 Unity 5 中无效。任何人都可以看到任何明显的破坏它的东西吗?

【问题讨论】:

  • 我会说它根本找不到着色器。您是否尝试在 Edit > Project Settings > Graphics 将着色器添加到“始终包含的着色器”?
  • 太棒了!这正是问题所在,非常感谢!如果您将其添加为答案,我可以根据需要进行确认吗?
  • 我很高兴有帮助。我已经把它变成了答案。

标签: ios unity3d shader


【解决方案1】:

错误告诉我Shader.Find("Custom/LineRender") 未能返回有效的着色器。

为确保您的着色器可供您从代码中加载,您可以将其添加到“始终包含的着色器”中。您可以在 Unity 菜单中的 Edit &gt; Project Settings &gt; Graphics 找到这些内容。

至于原因,只能猜测,但我偶尔会遇到以下情况:您的代码过去可能“神奇地”工作过,例如,您的一个预制件可能使用了着色器。它可能已分配给您资源中的材料等。某些东西将其拉入您的项目,从而使您可以从代码中加载它。当情况不再如此时,您的代码也会失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多