Возникла необходимость задействовать маску для спрайта под Андроид. Типа работаем маляром и закрашиваем стену.
Верия юнити 5.4.3. Так надо заказчику.
Нарыл в инете шейдер.
Синтаксис:
- Shader "Unlit/PixelColr1"
- {
- Properties
- {
- _MainTex ("Texture", 2D) = "white" {}
- _AddTex ("Texture", 2D) = "white" {}
- }
- SubShader
- {
- Tags
- {
- "Queue"="Transparent"
- "IgnoreProjector"="True"
- "RenderType"="Transparent"
- "PreviewType"="Plane"
- "CanUseSpriteAtlas"="True"
- }
- Cull Off
- Lighting Off
- ZWrite Off
- Blend SrcAlpha OneMinusSrcAlpha
- Pass
- {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #include "UnityCG.cginc"
- struct appdata_
- {
- float4 vertex : POSITION;
- float2 texcoord : TEXCOORD0;
- float2 texcoord1 : TEXCOORD1;
- };
- struct v2f
- {
- float4 vertex : SV_POSITION;
- half2 texcoord : TEXCOORD0;
- half2 texcoord1 : TEXCOORD1;
- };
- v2f vert(appdata_ IN)
- {
- v2f OUT;
- OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
- OUT.texcoord = IN.texcoord;
- OUT.texcoord1 = IN.texcoord1;
- return OUT;
- }
- sampler2D _MainTex;
- sampler2D _AddTex;
- fixed4 _Color;
- fixed4 frag(v2f IN) : COLOR
- {
- float4 texColor = tex2D( _MainTex, IN.texcoord );
- float4 texColor2 = tex2D( _AddTex, IN.texcoord1 );
- texColor = (texColor2.a < 0.1) ? texColor : texColor2;
- return texColor;
- }
- ENDCG
- }
- }
- }
И вроде всё работало, пока не начал тестировать на различных разрешениях экрана. И тут меня постиг шок. Чем меньше разрешение, тем непредсказуемо работает шейдер. Например на 800-480 вообще ничего не отображается, а на 1024х576 вместо серого получаю чёрный. На 1024х768, уже так как надо. В конце скрина , как должно быть.
Причём даже в самом окне редакторе если камеру редактора удаляю-приближаю, уже начинается такая котовасия.
Помогите плиз, кто с таким сталкивался, куда копать.
Скрин прилагаю:
Скрытый текст: