从Unity 4.x升级后,Unity 5自定义着色器损坏

时间:2015-06-25 15:52:58

标签: ios unity3d shader

我在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中不起作用。任何人都可以看到任何明显破坏它的东西吗?

1 个答案:

答案 0 :(得分:2)

错误向我表明Shader.Find("Custom/LineRender")无法返回有效的着色器。

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

至于原因,人们只能猜测,但有时会发生以下情况:你的代码可能有神奇的&#34;在过去工作过,就像你的一个预制件可能使用了着色器一样。它可能已分配给您的资源中的材料等。将某些内容拖入您的项目中,从而使您可以从代码中加载它。当不再是这种情况时,您的代码也会失败。