策划想加一个切换场景时有圆形遮罩淡入淡出的效果。 屏幕可视范围跟随目标物体移动,可修改可视范围大小,边缘渐变大小、以及遮罩颜色,支持最高物体数量可在Shader中修改,当前版本支持最多9个物体。
效果图如下:
控制面板如下: Shader代码如下:
Shader "Peter/DarkEffect"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
//追踪物体最多个数
#define ItemSize 9
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
fixed4 _DarkColor;
float _SmoothLength;
fixed _ItemCnt;
float4 _Item[ItemSize];
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed CalcAlpha(float4 vt, float4 pt)
{
if(pt.z 0) ? sqrt(distPow2) : 0;
float smoothLength = _SmoothLength;
if(smoothLength _items[0].radius, v => _items[0].radius = v, 1600, 0.6f);
}
最终效果如下图所示:
要注意radius的大小能否在不同目标位置下遮住所有屏幕。自己测试了下手游可以设为1800。
打包真机测试遇到了遮罩位置与unity中不同的问题,可以参考下面博客解决。 unity shader在不同平台表现不一致
原文地址