您当前的位置: 首页 >  unity
  • 6浏览

    0关注

    193博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity3D Shader实现动态圆形屏幕遮罩

我寄人间雪满头丶 发布时间:2020-06-22 17:57:33 ,浏览量:6

策划想加一个切换场景时有圆形遮罩淡入淡出的效果。 屏幕可视范围跟随目标物体移动,可修改可视范围大小,边缘渐变大小、以及遮罩颜色,支持最高物体数量可在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在不同平台表现不一致

原文地址

关注
打赏
1648518768
查看更多评论
立即登录/注册

微信扫码登录

0.3445s