2DSprite的实时阴影

看AliveGameStudio的视频发现他的2D场景的阴影好像是实时的2DSprite的实时阴影_第1张图片

 经UP大神指点 主要参考这个帖子 

http://forum.unity3d.com/threads/sprites-bumped-diffuse-shader-and-transparent-cutout-bumped-diffuse-with-shadows.217827/

果然是实时阴影 

其实只要打开SpriteRneder的Shadow开关就能渲染阴影了

void OnEnable()
    {
        
        transform.GetComponent().renderer.receiveShadows = true;
        transform.GetComponent().renderer.castShadows = true;
        
    }

但是 2DSprite 用的默认的Material  Sprites-Deafult 的Shader是不受光照影响的 没有光照当然没有阴影 所以还要把Shader换成受光照的漫反射Shader  但是换成系统的 Default-Diffuse 会发现贴图的透明通道也被渲染上去了  所以还要进行透明通道的裁剪. 下过来的Shader的渲染队列是Transparent 这样会导致 Deferred模式下的非平行不能照亮物体,没有起到光照的作用 所以渲染队列改成Geometry

Shader "Custom/SpriteDiffuse"
{
    Properties
    {
        _MainTex("Albedo (RGB)", 2D) = "white" {}
		_Color("Color Tint",Color)=(1,1,1,1)
		_AlphaCut("AlphaCut",Range(0,1))=1
     }

    SubShader
    {
        Tags { "RenderType"="TransparentCutOut" "Queue"="Geometry" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert addShadow alphatest:_AlphaCut

        sampler2D _MainTex;
        fixed4 _Color;
		


        struct Input
        {
            float2 uv_MainTex;
			fixed4 color:COLOR;
        };

        void surf(Input IN, inout SurfaceOutput o)
        {
            half4 c = tex2D(_MainTex, IN.uv_MainTex)*IN.color*_Color;

            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}


把材质球换成这个Shader后物体就能渲染2D阴影了  

2DSprite的实时阴影_第2张图片



你可能感兴趣的:(Unity)