text Unity的纹理动画着色器。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了text Unity的纹理动画着色器。相关的知识,希望对你有一定的参考价值。

Shader "Mattatz/TextureAnimation"
{
	Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
		_Color ("Color", Color) = (1, 1, 1, 1)

		_Cols ("Cols Count", Int) = 5
		_Rows ("Rows Count", Int) = 3
		_Frame ("Per Frame Length", Float) = 0.5
	}

	SubShader
	{
		Tags { "RenderType"="Opaque" }
		LOD 100

		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"

			struct appdata
			{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2f
			{
				float2 uv : TEXCOORD0;
				float4 vertex : SV_POSITION;
			};

			sampler2D _MainTex;
			float4 _MainTex_ST;

			fixed4 _Color;

			uint _Cols;
			uint _Rows;

			float _Frame;
			
			fixed4 shot (sampler2D tex, float2 uv, float dx, float dy, int frame) {
				return tex2D(tex, float2(
					(uv.x * dx) + fmod(frame, _Cols) * dx,
					1.0 - ((uv.y * dy) + (frame / _Cols) * dy)
				));
			}
			
			v2f vert (appdata v) {
				v2f o;
				o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
				o.uv = TRANSFORM_TEX(v.uv, _MainTex);
				return o;
			}
			
			fixed4 frag (v2f i) : SV_Target {
				int frames = _Rows * _Cols;
				float frame = fmod(_Time.y / _Frame, frames);
				int current = floor(frame);
				float dx = 1.0 / _Cols;
				float dy = 1.0 / _Rows;

				// not lerping to next frame
				// return shot(_MainTex, i.uv, dx, dy, current) * _Color;

				int next = floor(fmod(frame + 1, frames));
				return lerp(shot(_MainTex, i.uv, dx, dy, current), shot(_MainTex, i.uv, dx, dy, next), frame - current) * _Color;
			}

			ENDCG
		}
	}
}

以上是关于text Unity的纹理动画着色器。的主要内容,如果未能解决你的问题,请参考以下文章

[Unity] Shader(着色器)之纹理贴图

着色器图弄乱了纹理(Unity 2D)

Unity3D - 将在 iOS 设备上剪辑纹理的着色器

Unity:在 UI 画布图像的着色器中访问精灵二级纹理

着色器编程_unity中的基础纹理,使用Unity Shader实现基础纹理的渲染效果

着色器编程_unity中的基础纹理,使用Unity Shader实现基础纹理的渲染效果