1. 程式人生 > 其它 >合成類小遊戲原始碼,UGUIImage透明漸變

合成類小遊戲原始碼,UGUIImage透明漸變

合成類小遊戲原始碼,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透明漸變實現的相關程式碼, 更多內容歡迎關注之後的文章