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实现基础纹理的渲染效果