Unity. 코루틴을 사용한 페이드 인/아웃

1 분 소요

🌟 Fade In/Out

페이드 인은 검은 화면이 투명하게 변하면서 원래의 화면이 보이는 것을 말하고, 페이드 아웃은 원래의 화면에서 검은 화면으로 바뀌는 것을 말한다.

🌟 코루틴을 사용한 Fade In/Out

public class FadeIO : MonoBehaviour
{
    public Image fadeImg; // fade에 쓸 이미지
    public float fadeTime; //화면이 변할 시간
    public bool fadeout;
    public bool fadein;

    private bool isPlaying = false;

    private void Start()
    {
        fadein = true; //스크립트가 활성화된 경우, 페이드인 시킴. 이 부분은 원하면 생략
    }
    private void Update()
    {
        if (fadeout == true && isPlaying == false) //페이드아웃을 원할 때
        {
            StartCoroutine(FadeOut());
        }
        else if (fadeout == false && fadein == true) //페이드인을 원할 때
        {
            StartCoroutine(FadeIn());
        }
    }
    IEnumerator FadeOut()
    {
        fadeImg.gameObject.SetActive(true);
        isPlaying = true;
        Color tempColor = fadeImg.color;
        tempColor.a = 0f;
        while (tempColor.a < 1f)
        {
            tempColor.a += Time.deltaTime / fadeTime;
            fadeImg.color = tempColor;

            if (tempColor.a >= 1f)
            {
                tempColor.a = 1f;
            }
            yield return null;
        }
        fadeout = false;
    }
    IEnumerator FadeIn()
    {
        Color tempColor = fadeImg.color;
        while (tempColor.a > 0f)
        {
            tempColor.a -= Time.deltaTime / fadeTime;
            fadeImg.color = tempColor;

            if (tempColor.a <= 0f)
            {
                tempColor.a = 0f;
                fadeImg.color = tempColor;
            }
            yield return null;
        }
        fadeImg.gameObject.SetActive(false);
        fadein = false;
        isPlaying = false;
    }
}

페이드아웃을 시키고 페이드인 하는 경우가 많아서 isPlaying을 페이드인에서 false 했지만, 그렇지 않다면 페이드아웃에도 false 해야 한다. fadein과 fadeout bool 함수는 다른 객체에서 접근해서 사용할 수 있도록 public으로 지정했다.

댓글남기기