StartCoroutine 개념
StartCoroutine은 Unity에서 코루틴(Coroutine)을 시작하는 데 사용된다. 코루틴은 특정 작업을 비동기적*으로 수행할 수 있는 방법을 제공하며, 이로 인해 게임 로직의 흐름을 중단하지 않고도 시간이 오래 걸리는 작업을 처리할 수 있다.
*비동기란 특정 작업이 완료 되지 않고, 다른 작업을 동시에 진행할 수 있는 방식을 말한다.
yield 개념
yield는 코루틴 내에서 특정 조건을 기다릴 때 사용된다. yield는 Unity 엔진에게 코루틴을 잠시 중지하고 지정된 조건을 기다리게 하며, 조건이 만족되면 다음 코드를 실행하게 한다.
StartCoroutine과 yield 사용 예시
using UnityEngine;
public class CoroutineExample : MonoBehaviour
{
// 3초 후에 메시지를 출력하는 코루틴 함수
private IEnumerator Start()
{
Debug.Log("코루틴 시작!");
// 3초 대기
yield return new WaitForSeconds(3f);
// 3초가 지난 후에 실행되는 코드
Debug.Log("3초가 경과했습니다.");
}
// 버튼 클릭 시 호출되는 함수
public void StartMyCoroutine()
{
StartCoroutine(MyCoroutine());
}
private IEnumerator MyCoroutine()
{
Debug.Log("코루틴 시작!");
// 2초 동안 대기
yield return new WaitForSeconds(2f);
// 2초 뒤에 실행되는 코드
Debug.Log("2초 후에 작업 실행!");
}
}
위 코드 설명
- StartCoroutine(MyCoroutine()) : StartCoroutine을 사용해 MyCoroutine을 시작한다.
- yield return new WaitForSeconds(3f) : 3초 동안 대기하는 동안, Unity의 실행 흐름은 멈추지 않고 다른 작업을 계속 처리합니다. 3초 후에 코드가 다시 실행된다.
- Debug.Log : 각 시점에서의 상태를 로그로 출력하여, 코루틴의 흐름을 확인할 수 있다.
yield return null을 사용한 예시
yield return null은 코루틴 내에서 한 프레임을 기다리라는 의미이다. 이 코드를 사용하면 매 프레임마다 특정 작업을 실행할 수 있다.
private IEnumerator UpdatePositionOverTime()
{
float elapsedTime = 0f;
float moveTime = 5f; // 5초 동안 이동
while (elapsedTime < moveTime)
{
elapsedTime += Time.deltaTime; // 시간 경과
transform.position = Vector3.Lerp(transform.position, new Vector3(10f, 0f, 0f), elapsedTime / moveTime);
yield return null; // 다음 프레임까지 대기
}
Debug.Log("위치 이동 완료!");
}
위 코드 설명
- 이 코루틴은 5초 동안 객체를 이동시킨다.
- yield return null을 사용하여 매 프레임마다 객체의 위치를 조금씩 변경한다.
- Vector3.Lerp는 두 점 사이를 부드럽게 보간(lerp)하여 객체를 이동시킨다.
'유니티' 카테고리의 다른 글
[유니티] 인풋 시스템을 이용하여 캐릭터 WASD 이동 구현하기 (1) | 2025.03.07 |
---|---|
[유니티] 유니티에서 Delta에 대한 이해 (0) | 2025.03.06 |
[유니티] SkyBox 개념과 적용 방법 (0) | 2025.03.04 |
[유니티] IEnumrator를 사용한 스토리 컷 편집하는 법 (0) | 2025.02.27 |
[유니티] Canvas에 캐릭터 걷는 애니메이션 넣기 (0) | 2025.02.25 |