2015-07-21 49 views
1

我想使用掩碼組件以自定義字體顯示文本的一部分。如何正確使用UGUI掩碼和自定義字體

但像圖片說:

當我使用自定義的字體與「無(材料)」,面具工作得非常好,但文字是不正常的。 (圖1)

有人教我將文本材質改爲「Sprites-Default」,然後文本將正確顯示。而當我更改材質時,文字確實顯示正常,但面膜不起作用,無法覆蓋掉掩膜外的文字。 (圖2)

我應該怎麼做才能使它們全部正常工作?

Picture 1

Picture 2

回答

1

當我使用精靈,默認材料,團結警告我「材料雪碧/默認沒有模板的屬性」。所以我複製UI-defaultFont.shader的模板屬性。感謝上帝,它的工作。

這是我修改着色器:

與此着色器創建材質和使用該材料。 enter image description here

Shader "Custom/SpritesDefaultFont" 
{ 
Properties 
{ 
    [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} 
    _Color ("Tint", Color) = (1,1,1,1) 
    [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 

    _StencilComp ("Stencil Comparison", Float) = 8 
    _Stencil ("Stencil ID", Float) = 0 
    _StencilOp ("Stencil Operation", Float) = 0 
    _StencilWriteMask ("Stencil Write Mask", Float) = 255 
    _StencilReadMask ("Stencil Read Mask", Float) = 255 
} 

SubShader 
{ 
    Tags 
    { 
     "Queue"="Transparent" 
     "IgnoreProjector"="True" 
     "RenderType"="Transparent" 
     "PreviewType"="Plane" 
     "CanUseSpriteAtlas"="True" 
    } 

    Stencil 
    { 
     Ref [_Stencil] 
     Comp [_StencilComp] 
     Pass [_StencilOp] 
     ReadMask [_StencilReadMask] 
     WriteMask [_StencilWriteMask] 
    } 

    Cull Off 
    Lighting Off 
    ZWrite Off 
    Blend One OneMinusSrcAlpha 

    Pass 
    { 
    CGPROGRAM 
     #pragma vertex vert 
     #pragma fragment frag 
     #pragma multi_compile _ PIXELSNAP_ON 
     #include "UnityCG.cginc" 

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

     struct v2f 
     { 
      float4 vertex : SV_POSITION; 
      fixed4 color : COLOR; 
      half2 texcoord : TEXCOORD0; 
     }; 

     fixed4 _Color; 

     v2f vert(appdata_t IN) 
     { 
      v2f OUT; 
      OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); 
      OUT.texcoord = IN.texcoord; 
      OUT.color = IN.color * _Color; 
      #ifdef PIXELSNAP_ON 
      OUT.vertex = UnityPixelSnap (OUT.vertex); 
      #endif 

      return OUT; 
     } 

     sampler2D _MainTex; 

     fixed4 frag(v2f IN) : SV_Target 
     { 
      fixed4 c = tex2D(_MainTex, IN.texcoord) * IN.color; 
      c.rgb *= c.a; 
      return c; 
     } 
    ENDCG 
    } 
} 
} 
相關問題