Coroutine과 InvokeRepeating는 Update와는 다른, 별도의 시간의 간격으로 실행되는 동작을 구현할 수 있다.
using UnityEngine;
using System.Collections;
public class CoroutineTest : MonoBehaviour
{
private void Start()
{
StartCoroutine(Test());
}
private IEnumerator Test()
{
while(true)
{
Debug.Log("InvokeRepeating Test");
yield return null;
}
}
}
//실행 결과 : 매 프레임 마다 Log가 찍힌다.
using UnityEngine;
public class InvokeRepeatingTest1 : MonoBehaviour
{
private void Start()
{
InvokeRepeating("Test", 1, 1);
}
private void Test()
{
Debug.Log("InvokeRepeating Test");
}
}
//실행 결과 : 1초 후부터, 1초마다 Log가 찍힌다.
using UnityEngine;
public class InvokeRepeatingTest2 : MonoBehaviour
{
private void Start()
{
InvokeRepeating("Test", 1, 1);
Invoke("StopInvokeRepeating", 5);
}
private void Test()
{
Debug.Log("InvokeRepeating Test");
}
private void StopInvokeRepeating()
{
CancelInvoke("Test");
}
}
//실행 결과 : CancelInovke로 5초 후에 실행되던 InokeRepeating으로 실행한 Test가 동작하지 않는다.
Coroutine
하나의 메서드 자체를 담고 있기에 호출이 빠르다.
InvokeRepeating
호출할 메서드의 이름을 통한, 리플렉션 방식의 호출로, 같은 작업을 처리한다는 가정 하에 Coroutine보다 느리다.