2015-09-21 3 views
0

Прежде всего, я не имею ни малейшего представления о программировании шейдеров, но мне это нужно для моей игры, поэтому я нашел шейдер клипа в Интернете, тогда я пытался его изменить и добавить некоторые функции к нему! Я добавил шейдер в свой спрайт и проверил его на своем ПК и некоторых устройствах Android, но после этого я проверил его на HTC One (мой друг mobile), но странная проблема произошла!clip shader в Unity3D

enter image description here

Как вы видите, левая сторона не отсечение визуально.

Первый шейдер, который я нашел, имел ширину и длину для обрезки спрайта, тогда я добавил ширину слева и ширину справа и оттенок цвета в шейдер.

Существует код:

Shader "Sprites/ClipAreaWithAlpha" 
{ 
    Properties 
    { 
     _Color ("Color Tint", Color) = (1,1,1,1) 
     _MainTex ("Base (RGB), Alpha (A)", 2D) = "white" {} 
     _Length ("Length", Range(0.0, 1.0)) = 1.0 
     _WidthR("Width from right", Range(0.0, 1.0)) = 1.0 
     _WidthL ("Width from left", Range(0.0, 1.0)) = 0.0 
    } 

    SubShader 
    { 
     LOD 200 

     Tags 
     { 
      "Queue" = "Transparent" 
      "IgnoreProjector" = "True" 
      "RenderType" = "Transparent" 
     } 

     Pass 
     { 
      Cull Off 
      Lighting Off 
      ZWrite Off 
      Offset -1, -1 
      Fog { Mode Off } 
      ColorMask RGB 
      Blend SrcAlpha OneMinusSrcAlpha 

      CGPROGRAM 
      #pragma vertex vert 
      #pragma fragment frag 

      #include "UnityCG.cginc" 

      sampler2D _MainTex; 
      float4 _MainTex_ST; 
      float _Length; 
      float _WidthR; 
      float _WidthL; 
      half4 _Color; 

      struct appdata_t 
      { 
       float4 vertex : POSITION; 
       float2 texcoord : TEXCOORD0; 
      }; 

      struct v2f 
      { 
       float4 vertex : POSITION; 
       float2 texcoord : TEXCOORD0; 
       half4 color : COLOR; 
      }; 

      v2f vert (appdata_t v) 
      { 
       v2f o; 
       o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); 
       o.texcoord = v.texcoord; 
       o.color = _Color; 
       return o; 
      } 

      half4 frag (v2f IN) : COLOR 
      { 
       if ((IN.texcoord.x<_WidthL) || (IN.texcoord.x>_WidthR) || (IN.texcoord.y<0) || (IN.texcoord.y>_Length)) 
       { 
        half4 colorTransparent = half4(0,0,0,0) ; 
        return colorTransparent; 
       } 
       else 
       { 
        half4 tex = tex2D(_MainTex, IN.texcoord); 
        tex.a = IN.color.a; 
        return tex; 
       } 
      } 
      ENDCG 
     } 
    } 
} 

Как я уже говорил шейдер нормально на другой андроид устройств, которые я проверил, но на HTC One это не работает хорошо и правильно. Я не знаю, где проблема! Я благодарен за решение.

И это шейдер это предупреждение: MaterialPropertyBlock is used to modify these values

+0

Я еще не нашел решение. – ATHellboy

+0

попробуйте удалить "ColorMask RGB" –

ответ

0

Я была такая же проблема. Попробуйте отключить значение Generate Mip Maps, тогда шейдер работает правильно.