合成類小遊戲原始碼,UGUIImage透明漸變
阿新 • • 發佈:2021-08-06
合成類小遊戲原始碼,UGUIImage透明漸變實現的相關程式碼
```cpp // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' //參考https://blog.csdn.net/qq_34537249/article/details/78264955 Shader "Unlit/ImageAlpha" { Properties { [PerRendererData]_MainTex ("Texture", 2D) = "white" {} _AlphaLX("RangeAlphaLX",Float) = 0_AlphaRX("RangeAlphaRX",Float) = 1 _AlphaTY("RangeAlphaTY",Float) = 1 _AlphaBY("RangeAlphaBY",Float) = 0 _AlphaPower("Power",Float) = 0 //透明度變化範圍 } SubShader { Tags { "RenderType"="Transparent" } Blend SrcAlpha OneMinusSrcAlpha Cull Back Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include"UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; float _AlphaPower; sampler2D _AlphaTex; float _AlphaLX; float _AlphaRX; float _AlphaTY; float _AlphaBY; v2f vert (appdata v) { v2f o; o.vertex= UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } //此方法取自Unity預設Sprite的Shader fixed4 SampleSpriteTexture (float2 uv) { fixed4 color = tex2D (_MainTex, uv); #if ETC1_EXTERNAL_ALPHA // get the color from an external texture (usecase: Alpha support for ETC1 on android) color.a = tex2D (_AlphaTex, uv).r; #endif //ETC1_EXTERNAL_ALPHA return color; } fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 col = SampleSpriteTexture(i.uv); //利用透明度閾值和uv座標的差來計算透明的程度和是否控制其半透 //四個方向只是對座標的取值和正反方向不同,原理一致 fixed alphalx = col.a * lerp(1,_AlphaPower,(_AlphaLX-i.uv.x)); col.a = saturate(lerp(alphalx,col.a,step(_AlphaLX,i.uv.x))); fixed alpharx = col.a * lerp(1,_AlphaPower,(i.uv.x-_AlphaRX)); col.a = saturate(lerp(col.a,alpharx,step(_AlphaRX,i.uv.x))); fixed alphaby = col.a * lerp(1,_AlphaPower,(_AlphaBY-i.uv.y)); col.a = saturate(lerp(alphaby,col.a,step(_AlphaBY,i.uv.y))); fixed alphaty = col.a * lerp(1,_AlphaPower,(i.uv.y-_AlphaTY)); col.a = saturate(lerp(col.a,alphaty,step(_AlphaTY,i.uv.y))); return col; } ENDCG } } } ```
初始_AlphaLX("RangeAlphaLX",Float) = 0
_AlphaRX("RangeAlphaRX",Float) = 1
_AlphaTY("RangeAlphaTY",Float) = 1
_AlphaBY("RangeAlphaBY",Float) = 0
修改_AlphaTY可以達到從上到下逐漸漸變 其他也是如此需要
接著跟程式碼 位0置掛上鉤
```cpp using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class NewBehaviourScript : MonoBehaviour { public float A = 0; public Material _Material; // Start is called before the first frame update void Start() { _Material = GetComponent<Image>().material; } // Update is called once per frame void Update() { //關聯座標 進行透明漸變 if (transform.localPosition.y > 0) { _Material.SetFloat("_AlphaRX", (50 - transform.localPosition.y)/50); } } } ```
以上就是合成類小遊戲原始碼,UGUIImage透明漸變實現的相關程式碼, 更多內容歡迎關注之後的文章