유니티(Unity)에서 다양한 코루틴(Coroutine) 사용 예시

유니티(Unity)에서 다양한 코루틴(Coroutine) 사용 예시

시간 지연
특정 시간 동안 대기한 후 다음 작업을 수행
public class DelayExample : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(WaitAndPrint(2.0f)); // 2초 후 메시지 출력
    }

    private IEnumerator WaitAndPrint(float waitTime)
    {
        yield return new WaitForSeconds(waitTime);
        Debug.Log("Waited for " + waitTime + " seconds.");
    }
}

 

 

프레임마다 반복

매 프레임마다 특정 작업을 수행
public class FrameByFrameExample : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(UpdateEveryFrame());
    }

    private IEnumerator UpdateEveryFrame()
    {
        while (true) // 무한 루프
        {
            Debug.Log("This runs every frame.");
            yield return null; // 다음 프레임까지 대기
        }
    }
}

 

 

특정 조건에서 반복
public class ConditionExample : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(RepeatUntilCondition());
    }

    private IEnumerator RepeatUntilCondition()
    {
        while (!SomeCondition())
        {
            Debug.Log("Condition not met, repeating...");
            yield return new WaitForSeconds(1.0f); // 1초 대기
        }
        Debug.Log("Condition met!");
    }

    private bool SomeCondition()
    {
        // 예를 들어, 5초 후에 true 반환
        return Time.time > 5.0f;
    }
}

 

 

 

순차적인 작업 실행
여러 작업을 순차적으로 실행
public class SequentialExecution : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(PerformTasks());
    }

    private IEnumerator PerformTasks()
    {
        Debug.Log("Task 1 started.");
        yield return new WaitForSeconds(1.0f); // Task 1이 끝나는 시간

        Debug.Log("Task 2 started.");
        yield return new WaitForSeconds(1.0f); // Task 2가 끝나는 시간

        Debug.Log("All tasks completed.");
    }
}

 

 

 

애니메이션 효과
부드러운 애니메이션 효과를 만들기 위해 코루틴을 사용
public class FadeExample : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(FadeToColor(Color.clear, 2.0f));
    }

    private IEnumerator FadeToColor(Color targetColor, float duration)
    {
        Color startColor = GetComponent<Renderer>().material.color;
        float elapsedTime = 0f;

        while (elapsedTime < duration)
        {
            GetComponent<Renderer>().material.color = Color.Lerp(startColor, targetColor, elapsedTime / duration);
            elapsedTime += Time.deltaTime;
            yield return null; // 다음 프레임까지 대기
        }

        GetComponent<Renderer>().material.color = targetColor; // 최종 색상 설정
    }
}

 

 

비동기 로딩
코루틴을 사용하여 리소스를 비동기로 로드
using UnityEngine.SceneManagement;

public class LoadSceneExample : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(LoadYourSceneAsync("YourSceneName"));
    }

    private IEnumerator LoadYourSceneAsync(string sceneName)
    {
        AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName);

        while (!asyncLoad.isDone)
        {
            Debug.Log("Loading...");
            yield return null; // 다음 프레임까지 대기
        }

        Debug.Log("Scene loaded!");
    }
}

댓글

Designed by JB FACTORY