Страница 1 из 1

Sprite layer Mask

СообщениеДобавлено: 19 апр 2014, 21:09
cruiz
Есть слайдер, он будет двигать таблицу динамически с генерированных объектов. Нужно чтобы эти объекты были видны только в зоне действия маски, возможно ли это сделать без использования дополнительных камер.

Re: Sprite layer Mask

СообщениеДобавлено: 19 апр 2014, 21:23
waruiyume
Переформулируйте Ваш вопрос.

Re: Sprite layer Mask

СообщениеДобавлено: 19 апр 2014, 21:36
cruiz
исправил

Re: Sprite layer Mask

СообщениеДобавлено: 20 апр 2014, 06:34
waruiyume
Синтаксис:
Используется glsl
Shader "Cg/SpriteCrop"
{
        Properties
        {
                [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
                _Color ("Tint", Color) = (1,1,1,1)
                [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
                _Rect("Rect", Vector) = (0,0,1,1)
        }

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

                Cull Off
                Lighting Off
                ZWrite Off
                Fog { Mode Off }
                Blend SrcAlpha OneMinusSrcAlpha

                Pass
                {
                CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                        #pragma multi_compile DUMMY 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;
                                half2 scrPos : TEXCOORD1;
                        };
                       
                        fixed4 _Color;
                        fixed4 _Rect;

                        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

                                OUT.scrPos = ComputeScreenPos(OUT.vertex).xy;

                                return OUT;
                        }

                        sampler2D _MainTex;

                        fixed4 frag(v2f IN) : COLOR
                        {
                                fixed sp = 1.0;

                                sp *= step(_Rect.x, IN.scrPos.x);
                                sp *= step(IN.scrPos.x, _Rect.z);
                                sp *= step(_Rect.y, IN.scrPos.y);
                                sp *= step(IN.scrPos.y, _Rect.w);

                                return tex2D(_MainTex, IN.texcoord) * IN.color*sp;
                        }
                ENDCG
                }
        }
}