圖片循環滾動效果shader


背景無限循環滾動效果,有X和Y軸的速度控制,方便控制。見下圖,操作步驟同之前的背景循環設置。

   

shader如下:

Shader "Custom/Scroll" 
{
	Properties{
		_MainTint("Diffuse Tint" , Color) = (1,1,1,1)
		_MainTex("Base (RGB)", 2D) = "white" {}
	//x軸滾動速度  
	_ScrollXSpeed("X Scroll Speed" , Range(0,10)) = 2
		//y軸滾動速度  
		_ScrollYSpeed("Y Scroll Speed" , Range(0,10)) = 2
	}
		SubShader{
		Tags{ "RenderType" = "Opaque" }
		LOD 200

		CGPROGRAM
#pragma surface surf Lambert  
		fixed4 _MainTint;
	fixed _ScrollXSpeed;
	fixed _ScrollYSpeed;
	sampler2D _MainTex;

	struct Input {
		float2 uv_MainTex;
	};

	void surf(Input IN, inout SurfaceOutput o) {

		//獲取UV坐標  
		fixed2 scrolledUV = IN.uv_MainTex;

		//根據時間和x,y軸的速度 計算當前UV坐標的偏移量  
		fixed xScrollValue = _ScrollXSpeed * _Time;
		fixed yScrollValue = _ScrollYSpeed * _Time;
		scrolledUV += fixed2(xScrollValue,yScrollValue);

		half4 c = tex2D(_MainTex, scrolledUV);
		o.Albedo = c.rgb;
		o.Alpha = c.a;
	}
	ENDCG
	}
		FallBack "Diffuse"
}

  在material處調整速度即可;

         

 Ps:補充一個帶有調整亮度的shader,因為有的時候,把圖片設置該格式,整體會變暗。該shader不改變圖片的顏色、亮度

調整material的layer mutiplier,可設置亮度;

Shader "Unlit/ScrollX"
{
	Properties
	{
		_MainTex("Base Layer(RGB)", 2D) = "white" {}    //第一層紋理  較遠紋理
	 //_DetailTex("2nd Layer(RGB)",2D)="white"{}     //第二層紋理  較近紋理
	   _ScrollX("Base layer Scroll Speed",Float) = 1.0   //第一層滾動速度
	//_Scroll2X ("2nd layer Scroll Speed", Float) = 1.0   //第二層滾動速度
		_Mutiplier("Layer Mutiplier", Float) = 1         //整體亮度
	}
		SubShader
	{
		Tags{ "RenderType" = "Opaque" "Queue" = "Geometry" }
		LOD 100

		Pass
	{
		Tags{ "LightMode" = "ForwardBase" }
		CGPROGRAM
#pragma vertex vert
#pragma fragment frag


#include "UnityCG.cginc"

		struct a2v
	{
		float4 vertex : POSITION;
		float2 texcoord : TEXCOORD0;
	};

	struct v2f
	{
		float4 pos : SV_POSITION;
		float2 uv : TEXCOORD0;
	};

	sampler2D _MainTex;
	float4 _MainTex_ST;
	//sampler2D _DetailTex;
	//float4 _DetailTex_ST;
	float _ScrollX;
	//fixed _Scrll2X;
	float _Mutiplier;

	v2f vert(a2v v)
	{
		v2f o;
		o.pos = UnityObjectToClipPos(v.vertex);

		o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex) + frac(float2 (_ScrollX, 0.0) * _Time.y);

		//o.uv.zw = TRANSFORM_TEX(v.texcoord, _DetailTex) + frac(float2 _Scroll2X, 0.0) * _Time.y);
		return o;
	}

	fixed4 frag(v2f i) : SV_Target
	{

		fixed4 c = tex2D(_MainTex, i.uv.xy);
	//fixed4 secondLayer = tex2D(_DetailTex, i.uv.zw);

	//fixed c = lerp(firstLayer, secondLayer, secondLayer.a);
	c.rgb *= _Mutiplier;

	return c;
	}
		ENDCG
	}
	}
		FallBack "VertexLit"
}

  另,該shader也可做2d場景背景,有影子隨着背景移動的shader,只需要把注釋打開即可。

  附上一個只可以調X軸速度的,僅供參考;  

Shader "Custom/ScrollingBackground" {
	Properties{
		_MainTex("Base (RGB)", 2D) = "white" {}
	_ScrollX("Scroll Speed", float) = 1.0
	}
		SubShader{
		Tags{ "RenderType" = "Opaque" }
		LOD 200
		Pass{
		Tags{ "LightMode" = "ForwardBase" }

		CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

		sampler2D _MainTex;
	float4 _MainTex_ST;
	float _ScrollX;

	struct a2v {
		float4 vertex : POSITION;
		float4 texcoord : TEXCOORD0;
	};

	struct v2f {
		float4 pos : SV_POSITION;
		half2 uv : TEXCOORD0;
	};

	v2f vert(a2v v) {
		v2f o;
		o.pos = UnityObjectToClipPos(v.vertex);
		o.uv = v.texcoord.xy*_MainTex_ST.xy + _MainTex_ST.zw;
		//frac(x):返回x的小數部分
		o.uv += frac(float2(_ScrollX, 0.0) * _Time.y);
		return o;
	}

	fixed4 frag(v2f i) : Color{
		fixed4 c = tex2D(_MainTex, i.uv);
	return c;
	}
		ENDCG
	}
	}
		FallBack "VertexLit"
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM