2015-07-21 44 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 
    } 
} 
} 
相关问题