[ToneTuneToolkit][023]UGUI的去色,使UI元素變為灰色

MirzkisD1Ex0發表於2024-06-11

#region Environment
Windows 10 22H2
Unity 2022.3.30f1 LTS
VSCode 1.90.0
// ToneTune Toolkit 下載地址
// https://github.com/MirzkisD1Ex0/ToneTuneToolkit.git
#endregion

把UGUI的元素去色!變成灰色!!!

超級方便!

// 該項功能已包含至ToneTuneToolkit外掛

01.新建場景,新建一個Shader,取名為GreyscaleShader.shader,內容如下。

Shader "UI/GreyscaleShader"
{
Properties
{
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
_Color("Tint", Color) = (1, 1,1 , 1)
_Greyscale("Greyscale", Range(0, 1)) = 1
[HideInInspector] _RendererColor("RendererColor", Color) = (1,1,1,1)
[HideInInspector] _Flip("Flip", Vector) = (1,1,1,1)
[PerRendererData] _AlphaTex("External Alpha", 2D) = "white" {}
[PerRendererData] _EnableExternalAlpha("Enable External Alpha", Float) = 0
}
SubShader
{
Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
"PreviewType" = "Plane"
"CanUseSpriteAtlas" = "True"
}
Cull Off
Lighting Off
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex SpriteVert
#pragma fragment frag
#pragma target 2.0
#pragma multi_compile_instancing
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
#include "UnitySprites.cginc"
half _Greyscale;
fixed4 frag(v2f IN) : SV_Target
{
fixed4 c = SampleSpriteTexture(IN.texcoord) * IN.color;
c.rgb = lerp(c.rgb, dot(c.rgb, float3(0.3, 0.59, 0.11)), _Greyscale);
c.rgb *= c.a;
return c;
}
ENDCG
}
}
Fallback "Sprites/Default"
}

02.場景中新建一個UGUI,隨便上張圖作為測試用。

03.新建一個Materials,Shader選擇剛剛建立的UI/GreyscaleShader。

04.將Materials賦給UGUI,Greyscale可以對灰度進行縮放。

#region Introduction
工具原工程位於Github並遵從GPLv3.0協議,請根據需求使用。
文章僅作拋磚引玉之用,希望藉此給予尋求思路的開發者們一些靈感。
此教程系列曾屬於“Unity The Great”,但由於“Tone Tune Tookit”的誕生,因此我決定將兩個系列進行合併。
如果內容中出現了語混序亂、錯鱉字、缺少標點符號的情況還請見諒
網際網路精神永存。
#endregion

#region Developer
[團隊代言人部落格]
// https://www.cnblogs.com/mirzkisd1ex0/
[開發者郵箱]
// dearisaacyang@outlook.com
[開發者微信]
// qq2957047371
[開發者企鵝]
// 2957047371
#endregion

相關文章