본문 바로가기
유니티/유니티 문법?

코루틴 (대기시간 주는 것)

by xortl98 2021. 4. 19.
728x90

서서히 UI가 사라지는 Fade-In 기능을 사용하려고 아래와 같이 코드를 작성하였다.

하지만 너무 빠르게 컴퓨터가 동작해 바로 화면이 불투명해지게 변한다. 

이를 해결하기 위해 함수에 대기시간을 주는 "코루틴" 이라는 함수를 이용하였다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;	//UI안에 있는 함수를 쓰기 위해 선언 

public class Fade : MonoBehaviour
{
    public Image fadeImage;

    void Start()
    {
        FadeIn();
    }

   void FadeIn()
    {
        Color startColor = fadeImage.color; //처음 이미지 색

        for(int i=0;i<100;i++)
        {
            //R(red),G(green),B(blue),A(alpha),
            startColor.a = startColor.a - 0.01f;
            fadeImage.color = startColor; //천천히 빼서 fadein처럼 보이게함 
        }
    }
}

 

코루틴으로 작성한 함수 

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

public class Fade : MonoBehaviour
{
    public Image fadeImage;
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(FadeIn()); //성능은 좋지만 인위적으로 멈추는거 불가능
        //StartCoroutine("FadeIn") => 인위적으로 멈출 수 있음 
    }

    IEnumerator FadeIn()
    {
        Color startColor = fadeImage.color; //처음 이미지 색

        for(int i=0;i<100;i++)
        {
            //R(red),G(green),B(blue),A(alpha),
            startColor.a = startColor.a - 0.01f;
            fadeImage.color = startColor; //천천히 빼서 fadein처럼 보이게함 

            //함수가 100번 동작하니 총 1초라는 대기시간이 걸림
            yield return new WaitForSeconds(0.01f); // 0.01초라는 대기시간 삽입 

        }
    }
}

 

천천히 사라지는걸 확인 할 수 있다.

코루틴으로 변경한 후