栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

shader实例:实现类似宝可梦 Pokemon 的战斗转场

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shader实例:实现类似宝可梦 Pokemon 的战斗转场

宝可梦游戏在进入战斗前会有类似这样转场动画。

例子中使用的纹理质量较差,边缘比较模糊,和shader无关。

这个UI是盖在所有UI最前面的。可以使用shader来完成这个工作,而不是复杂的动画。

使用一张这样的灰度图,用动画控制cutoff值来决定产生遮罩的像素从而产生动画。

Shader 代码如下:

Shader "UI/UITransitions"
{
	// 通过材质可以控制的变量,使用inspector设置
	Properties
	{
		_MainTex("Texture", 2D) = "white" {}
		_TransitionTex("Transition Texture", 2D) = "white" {}
		_Color("Screen Color", Color) = (1,1,1,1)
		_Cutoff("Cutoff", Range(0, 1)) = 0
		_Fade("Fade", Range(0, 1)) = 0
	}

	// 对应多个变体。如:一个subshader给pc用,另一个给手机用
	SubShader
	{
		// 不剪切背表面、不写z、ztest永远通过
		Cull Off ZWrite Off ZTest Always

		// 每个pass会渲染一次物体。如:一个pass处理平行光,再加一个处理点光
		Pass
		{
			// Unity的HLSL开始的地方,ENDCG
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			#include "UnityCG.cginc"

			// semantic 指明值怎么用,如:TEXCOORD0在ps中会得到插值
			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			// SV_POSITION SV_ ( system value )
			struct v2f
			{
				float4 vertex : SV_POSITION;
				float2 uv : TEXCOORD0;
				float2 uv1 : TEXCOORD1;
			};

			float4 _MainTex_TexelSize;

			// 每顶点处理
			v2f vert(appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = v.uv;
				o.uv1 = v.uv;

				// 统一dx和gl对于uv的取值方式
				// _TexelSize: https://docs.unity3d.com/Manual/SL-PlatformDifferences.html
				#if UNITY_UV_STARTS_AT_TOP
				if (_MainTex_TexelSize.y < 0)
					o.uv1.y = 1 - o.uv1.y;
				#endif

				return o;
			}

			// 对应Properties中的名称,才可以使用
			sampler2D _MainTex;
			sampler2D _TransitionTex;
			fixed4 _Color;
			float _Cutoff;
			float _Fade;

			// 每像素处理
			// 需要指定 SV_Target(也就是frame buffer屏幕上看到的图像)
			fixed4 frag(v2f i) : SV_Target
			{
				fixed4 transit = tex2D(_TransitionTex, i.uv1);

				fixed4 col = tex2D(_MainTex, i.uv);

				// 小于cutoff值,使用_Color插值此像素
				if (transit.r < _Cutoff)
					return col = lerp(col, _Color, _Fade);

				return col;
			}					
			ENDCG
		}
	}
}

完整unity package 已经上传
shader已经详细中文注解

如何使用:
1 导入package
2 打开UITransitions Scene

3 选择UITransitions 材质,调整属性、更换mask图

4. Properties说明:
Transition Texture :遮罩纹理
Screen Color: 遮罩颜色
Cutoff : 遮罩大小(需要用动画去控制的值)
Fade: 遮罩混合度

完整unity package 已经上传
shader已经详细中文注解

更多Shader实例

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901847.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号