Unity Shader 之 实现循环滚动浏览长图片的效果

2025-10-25 00:18:11

1、打开Unity,新建一个空工程,具体如下图

Unity Shader 之 实现循环滚动浏览长图片的效果

2、向工程中导入一个长图片,因为要循环浏览图片,那图片的 wrap mode 设置为 repeat ,具体如下图

Unity Shader 之 实现循环滚动浏览长图片的效果

Unity Shader 之 实现循环滚动浏览长图片的效果

3、在工程中,新建一个脚本可以命名为“LoopRollAnimation”,然后双击打开,具体如下图

Unity Shader 之 实现循环滚动浏览长图片的效果

4、脚本“LoopRollAnimation”的具体代码和代码说明如下图

Unity Shader 之 实现循环滚动浏览长图片的效果

Unity Shader 之 实现循环滚动浏览长图片的效果

Unity Shader 之 实现循环滚动浏览长图片的效果

5、脚本“LoopRollAnimation”具体内容如下:

Shader "Custom/LoopRollAnimation" {

Properties {

_Color ("Color", Color) = (1,1,1,1) // 图片混合颜色参数

_MainTex ("Albedo (RGB)", 2D) = "white" {} // 设置的长图片

_SeparateNumber("Seprate Number", float) = 3 // 把图片大概分割显示的个数

_RollSpeed("Roll Speed", Range(5,20)) = 10 // 滚动播放的速度参数

}

SubShader {

Pass{

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "UnityCG.cginc"

// 属性里面的参数在CG编程中需要重新声明,才能使用

float4 _Color;

sampler2D _MainTex;

float _SeparateNumber;

float _RollSpeed;

// 定义结构获取顶点信息和纹理坐标

struct appdata{

float4 vertex : POSITION;

float2 uv : TEXCOORD0;

};

struct v2f{

float4 pos : SV_POSITION;

float2 uv : TEXCOORD0;

};

v2f vert (appdata v){

v2f o;

// 物体的模型到世界矩阵 * 从世界到摄像机的矩阵 * 投影的矩阵

o.pos = UnityObjectToClipPos(v.vertex);

o.uv = v.uv;

return o;

}

// 实现循环滚动播放的函数

float4 LoopRollAnimationFunc(v2f i){

// 根据把图片大概分割显示的个数显示图片,然后在时间函数下移动图片

// 这里是水平移动,竖直移动的话,对 y 进行修改即可

float uv_x = i.uv.x * (1.0 / _SeparateNumber )  + _Time.x * _RollSpeed;

float uv_y = i.uv.y;

float2 uv = float2(uv_x, uv_y);

// 根据 uv 显示长图片,并且混合颜色

float4 color = tex2D(_MainTex, uv);

color.rgb *= _Color.rgb;

return color;

}

float4 frag(v2f i) : COLOR{

// 调用循环滚动函数

float4 color = LoopRollAnimationFunc(i);

return color;

}

ENDCG

}

}

}

6、脚本编译正确,回到Unity,在场景中 添加一个 Image,并且在工程中新建一个材质,把shader设置为刚才新建的shader,具体如下图

Unity Shader 之 实现循环滚动浏览长图片的效果

7、给材质赋值长途和对应参数,然后把材质赋给 Image,具体如下图

Unity Shader 之 实现循环滚动浏览长图片的效果

Unity Shader 之 实现循环滚动浏览长图片的效果

8、运行场景,循环滚动浏览长图片的效果如下图

Unity Shader 之 实现循环滚动浏览长图片的效果

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢