●코루틴
- 대기 시간을 가질 수 있는 메서드다.
- IEnumerator 타입을 반환한다.
- 처리가 일시 대기 할 곳에 yield 키워드를 명시해야한다.
- 코루틴 메서드는 StartCoroutine()으로 실행한다.
StartCoroutine(A());
StartCoroutine(A(100)); // 매개변수가 있다면 입력 값도 넣어 줄 수 있다.
StartCoroutine("A")
- 코루틴의 대기 시간 동안 다른 코드가 실행 될 수 있다.
- yield return : 반환값과 함께 중단
- yield return : 반환값 없이 중단
- MoveNext()가 호출될 때 마다 이전에 중단되었던 지점부터 재실행되며 yield문을 만날 때 까지 실행한다.
IEnumerator A()
{
yield return new WaitForSeconds(10f); // 10초 동안 쉬기
yield return new WaitForSeconds(20f); // 20초 동안 쉬기
yield return null; // 한 프레임만 쉬기
}
using System;
using System.Collections.Generic;
IEnumerator<int> TestIteratorMethod()
{
yield return 1;
yield return 2;
yield return 3;
yield return 4;
yield return 5;
yield return 6;
yield return 7;
yield return 8;
yield return 9;
yield return 10;
}
IEnumerator<int> enumerator = TestIteratorMethod();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
// yield를 사용하면 함수 중간에 빠져나갈 수 있는데
// 일반적인 if문으로 함수 중간에 빠져나가게 되면 그 빠져나간 위치로 다시 돌아 올 순 없지만
// yield를 사용하면 다시 빠져나갈 위치로 돌아와 다음 코드를 실행할 수 있게 된다
void Update()
{
elapsedTime += Time.deltaTime;
if (elapsedTime > = 0.5f)
{
elapsedTime = 0f;
GameObject bullet = Instantiate(BulletPrefab, transform);
bullet.transform.LookAt(Player);
}
}
// 위 코드를 아래 코드로 변경 할 수 있음
IEnumerator Shot()
{
while (true)
{
GameObject bullet = Instantiate(BulletPrefab, transform);
bullet.transform.LookAt(Player);
yield return new WaitForSeconds(0.5f);
}
}
[C#] 레이캐스트 (0) | 2022.07.21 |
---|---|
[C#] 위치, 크기, 회전 (0) | 2022.07.21 |
[C#] Interface (0) | 2022.07.20 |
[Unity] PlayerPrefs 저장 위치 (0) | 2022.07.13 |
[Unity] Font Asset 만들기 (0) | 2022.07.13 |
댓글 영역