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

 

創作者介紹
創作者 初學者日記 的頭像
初學者日記

初學者日記

初學者日記 發表在 痞客邦 留言(0) 人氣( 231 )