Unity: realize the dynamic light and shadow effect of Bafang tourism

method one:

Create a new shader

Shader "Sprites/Custom/SpriteShadow"
{
    Properties
    {
        [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
    _Color("Tint", Color) = (1,1,1,1)
        [MaterialToggle] PixelSnap("Pixel snap", Float) = 0
        [HideInInspector] _RendererColor("RendererColor", Color) = (1,1,1,1)
        [HideInInspector] _Flip("Flip", Vector) = (1,1,1,1)
        [PerRendererData] _AlphaTex("External Alpha", 2D) = "white" {}
    [PerRendererData] _EnableExternalAlpha("Enable External Alpha", Float) = 0
        _Cutoff("Alpha Cutoff", Range(0,1)) = 0.5
    }

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

        Cull Off
        Lighting Off
        ZWrite Off
        Blend One OneMinusSrcAlpha

        CGPROGRAM
#pragma surface surf Lambert vertex:vert alphatest:_Cutoff addshadow nofog nolightmap nodynlightmap keepalpha noinstancing
#pragma multi_compile_local _ PIXELSNAP_ON
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
#include "UnitySprites.cginc"

        struct Input
    {
        float2 uv_MainTex;
        fixed4 color;
    };

    void vert(inout appdata_full v, out Input o)
    {
        v.vertex = UnityFlipSprite(v.vertex, _Flip);

#if defined(PIXELSNAP_ON)
        v.vertex = UnityPixelSnap(v.vertex);
#endif

        UNITY_INITIALIZE_OUTPUT(Input, o);
        o.color = v.color * _Color * _RendererColor;
    }

    void surf(Input IN, inout SurfaceOutput o)
    {
        fixed4 c = SampleSpriteTexture(IN.uv_MainTex) * IN.color;
        o.Albedo = c.rgb * c.a;
        o.Alpha = c.a;
    }
    ENDCG
    }

        Fallback "Transparent/VertexLit"
}

Create a new material and change the shader to the newly created shader

Add new materials to 2D pictures

On the inspector window of the 2D picture, click the three dots on the right to enter Debug

Set CastShadows to On, ReceiveShadow is selected

 

Create a plane, add a material, arrange the picture, set the desired ambient light in the lighting window, add a light source to the scene, and set the shadow type in the light source

You can achieve simple light and shadow, but there will be no shadow between pictures

 Method 2:

Create a new material with renderingmode set to cutout

Add a material to the 2D image, so that there will be shadows between the images, but if the light shines from the back of the image, there will be no shadows

The solution, the Shader (no), or two soil sheets are superimposed front and back 

Guess you like

Origin blog.csdn.net/qq_51491918/article/details/119893242