看AliveGameStudio的视频发现他的2D场景的阴影好像是实时的
经UP大神指点 主要参考这个帖子
果然是实时阴影
其实只要打开SpriteRneder的Shadow开关就能渲染阴影了
void OnEnable()
{
transform.GetComponent<SpriteRenderer>().renderer.receiveShadows = true;
transform.GetComponent<SpriteRenderer>().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阴影了