1.編寫 Shader, 這裡定義了3個變量,其中_MainTex代表背景貼圖,_Width代表顯示背景的百分比,_Distance代表當前滾動的距離。核心代碼為“i.uv.x = frac(i.uv.x*_Width + _Distance);”,其中frac是取小數的函數,如1.23 取出來是0.23,其功能是將i.uv.x 控制在0到1的範圍,進而顯示出來。
Shader "Lpy/ImageRoll"
{
Properties
{
_MainTex("Main Tex", 2D) = "white" {}
_Width("Width", float) = 0.5
_Distance("Distance", float) = 0
}
SubShader
{
Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
Pass
{
Tags{ "LightMode" = "ForwardBase" }
ZTest off
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float _Width;
float _Distance;
struct a2v
{
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
v2f vert(a2v v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv.x = v.texcoord.x;
o.uv.y = v.texcoord.y;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
i.uv.x = frac(i.uv.x*_Width + _Distance);
fixed4 c = tex2D(_MainTex, i.uv);
return c;
}
ENDCG
}
}
FallBack "Transparent/VertexLit"
}
2.創建材質,選擇剛寫的 shader,調整 Width還有Distance
3.測試腳本,啟動後你就會看到圖片自動向前滾動
public class ImageRoll : MonoBehaviour
{
public Image image;
private Material mtl;
float distance;
void Start()
{
mtl = image.material;
}
void Update()
{
distance += 0.005f;
mtl.SetFloat("_Distance", distance);
}
}
此文章從以下網站轉載
https://www.manew.com/thread-101574-1-1.html
請先 登入 以發表留言。