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
