Unity2D

Unity) [유니티 2D] 셰이더를 활용하여 이미지 흰색으로 변경

HSH12345 2023. 5. 15. 15:15
Shader "Custom/whiteShader"
{
	Properties
	{
		_MainTex("Texture", 2D) = "white" {}
		_TintColor("Tint Color", Color) = (1, 1, 1, 1)
	}

		SubShader
		{
			Tags { "RenderType" = "Transparent" "RenderType" = "Opaque" }

			Pass
			{
	     		 Blend SrcAlpha OneMinusSrcAlpha

				CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag

				#include "UnityCG.cginc"

				sampler2D _MainTex;
				fixed4 _TintColor;

				struct appdata
				{
					float4 vertex : POSITION;
					float2 uv : TEXCOORD0;
				};

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

				v2f vert(appdata v)
				{
					v2f o;
					o.vertex = UnityObjectToClipPos(v.vertex);
					o.uv = v.uv;
					return o;
				}

				fixed4 frag(v2f i) : SV_Target
				{
					fixed4 texColor = tex2D(_MainTex, i.uv);
					fixed4 finalColor;
					finalColor.rgb = _TintColor.rgb; 
					finalColor.a = texColor.a * _TintColor.a; 
					return finalColor;
				}
				ENDCG
			}
		}
}

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UIExpSlideDirector : MonoBehaviour
{
    public Slider sliderExp;
    public Text txtExp;
    public Image imgFill;

    private float blinkDelay = 0.1f;

    private Material originMaterial;
    [SerializeField]
    private Material whiteMaterial;

    private Coroutine blinkRoutine;

    public void Init()
    {
        this.originMaterial = this.imgFill.material;
    }

    public void BlinkEXPFill()
    {
        if (this.blinkRoutine != null) StopCoroutine(this.blinkRoutine);
        this.blinkRoutine = StartCoroutine(this.BlinkRoutine());
    }

    private IEnumerator BlinkRoutine()
    {
        this.imgFill.material = this.whiteMaterial;
        yield return new WaitForSeconds(this.blinkDelay);
        this.imgFill.material = this.originMaterial;
    }
}

 

 유니티 이미지가 흰색이 아니라면 Color 값을 활용하여 원하는 색상으로 변경할 수 없습니다.. 해당 문제를 해결하기 위해 Shader를 만들어 필요할 때 원하는 Shader를 적용하는 방식으로 이미지 색상을 변경하였습니다. 해당 기능은 좌상단의 EXP, Healthbar UI에 적용하였습니다.