Unity场景向屏幕中心塌陷的shader
发表于2019-01-23
游戏中的场景分为很多种,本篇文章中要分享的是在开发过程中如何利用shader实现场景向屏幕中心塌陷的效果。
shader代码:
Shader "Custom/CollapseShader" { Properties { _MainTex ("Maintex", 2D) = "white" {} _Progress ("Progress" , Float) = 1 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 Pass{ CGPROGRAM #include "UnityCG.cginc" #pragma vertex vert_img #pragma fragment frag sampler2D _MainTex; float _Progress; fixed4 frag(v2f_img i) : SV_Target { float2 uv = (i.uv - float2(0.5f,0.5f)); float dis = length(uv); uv = i.uv + normalize(uv)*(1-length(uv))*(_Progress); fixed4 c = tex2D(_MainTex,uv); return c*(1-_Progress); } ENDCG } } FallBack "Diffuse" }
代码很简单,一个_Progress变量控制当前塌陷的程度,使用当前uv距离中心点的向量*当前uv到当前方向边缘的距离来计算当前位置偏移后的位置。
C#代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CollapseCamera : MonoBehaviour { Camera mainCamera; public Material m; float progress = 0; public float distance; // Use this for initialization void Start () { mainCamera = gameObject.GetComponent<Camera>(); } // Update is called once per frame void Update () { if (progress >= 1 ) return; progress += (Time.deltaTime * 0.5f); m.SetFloat("_Progress", progress); } void OnRenderImage(RenderTexture src, RenderTexture dest) { Graphics.Blit(src, dest, m); } }
将此脚本挂在到摄像机上并赋予一个使用了上边shader的材质球,运行场景即可看到效果。
完整代码:https://github.com/LiuFeng1011/Test/tree/master/Assets/CollapseTest