Unity Shader實現背景無限循環滾動效果

最近做項目遇到的這個需求,分享給大家,有需要可以參考。

  • 首先我們準備一下背景貼圖,然後對貼圖進行設置如下圖所示:
    在這裏插入圖片描述

貼圖格式也可以是Texture格式,但是WrapMode 一定要是Repeat【重複發生】;記得Apply
WrapMode:循環模式;換行模式;包裹模式;纏繞

  • 將材質拖到物體身上
  • 下面來編寫Shader,代碼如下
Shader "Unlit/ScrollX"
{
	Properties
	{
		 _Color("Color", Color) = (1,1,1,1)				// 顏色
		_MainTex("MainTex(RGBA)", 2D) = "green" {}     // 紋理    
	_ScrollX("Base layer Scroll Speed",Float) = 1.0    // 滾動速度

		_Mutiplier("Layer Mutiplier", Float) = 1         //整體亮度
	}
		SubShader
	{
		Tags{ "RenderType" = "Transparent" "Queue" = "Overlay" "IgnoreProjector" = "True" }		// 設置材質Model
		LOD 100
		Cull Off Lighting Off ZWrite Off ZTest Always
		Blend SrcAlpha OneMinusSrcAlpha

		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;
	float _ScrollX;
	float _Mutiplier;
	fixed4 _Color;

	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));		// 控制波紋方向

		return o;
	}

	fixed4 frag(v2f i) : SV_Target
	{

		fixed4 c = tex2D(_MainTex, i.uv.xy);
		c.rgb *= _Color;		
		

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

最終下過如下:
在這裏插入圖片描述
上面因需求我需要將其設置爲透明,如果不需要透明則對shader進行稍微的修正,代碼及效果如下:

		// 	!!! 將原shader中的Tags 和 Cull註釋掉換成新的Tags如下面
		//Tags{ "RenderType" = "Transparent" "Queue" = "Overlay" "IgnoreProjector" = "True" }		// 設置材質Model
		/*Cull Off Lighting Off ZWrite Off ZTest Always
		Blend SrcAlpha OneMinusSrcAlpha*/
		Tags{ "RenderType" = "Opaque" "Queue" = "Geometry" }

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章