手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

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

时间:2024-10-12 07:26:55

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 之 实现循环滚动浏览长图片的效果
© 手抄报圈