Unity에서는 Invoke 메서드를 통해 일정 시간이 지난 후 특정 메서드를 호출할 수 있습니다. 이를 통해 게임에서 다양한 기능을 구현할 수 있습니다. 이번 글에서는 Unity에서 Invoke 메서드를 사용하는 방법과 주의사항에 대해 자세히 알아보겠습니다.
Invoke 메서드 사용하기
Invoke 메서드는 MonoBehaviour 클래스에서 상속받은 클래스에서 사용할 수 있습니다. 아래는 Invoke 메서드의 기본적인 사용 방법입니다.
public void Invoke(string methodName, float time);
위 메서드의 첫 번째 인자로는 호출하고 싶은 메서드의 이름을, 두 번째 인자로는 호출까지 걸리는 시간을 입력합니다. 예를 들어, 아래 코드는 3초 후에 TestMethod를 호출합니다.
public class Example : MonoBehaviour
{
void Start()
{
Invoke("TestMethod", 3f);
}
void TestMethod()
{
Debug.Log("TestMethod called");
}
}
Invoke 메서드는 더 많은 인자를 가질 수 있습니다. 아래는 Invoke 메서드의 전체 형태입니다.
public void Invoke(string methodName, float time);
public void InvokeRepeating(string methodName, float time, float repeatRate);
public void CancelInvoke();
public void CancelInvoke(string methodName);
InvokeRepeating 메서드는 일정한 간격으로 메서드를 호출할 수 있습니다. 첫 번째 인자로는 호출하고 싶은 메서드의 이름을, 두 번째 인자로는 첫 호출까지 걸리는 시간을, 세 번째 인자로는 메서드 호출 간격을 입력합니다. 아래 코드는 2초 후에 TestMethod를 호출하고, 그 이후로는 1초 간격으로 호출합니다.
public class Example : MonoBehaviour
{
void Start()
{
InvokeRepeating("TestMethod", 2f, 1f);
}
void TestMethod()
{
Debug.Log("TestMethod called");
}
}
CancelInvoke 메서드는 Invoke나 InvokeRepeating 메서드로 예약된 모든 호출을 취소합니다. CancelInvoke(string methodName)은 특정 메서드에 대한 호출만 취소합니다. 아래 코드는 3초 후에 TestMethod를 호출하고, 2초 후에 취소합니다.
public class Example : MonoBehaviour
{
void Start()
{
Invoke("TestMethod", 3f);
Invoke("CancelInvokeMethod", 2f);
}
void TestMethod()
{
Debug.Log("TestMethod called");
}
void CancelInvokeMethod()
{
CancelInvoke("TestMethod");
}
}
주의사항
Invoke 메서드를 사용할 때 주의해야 할 점이 몇 가지 있습니다.
1. Invoke 메서드는 게임 오브젝트가 활성화되어 있어야 합니다.
Invoke 메서드는 게임 오브젝트가 비활성화된 상태에서 호출될 수 없습니다. 따라서 Invoke 메서드를 사용할 때는 게임 오브젝트를 활성화한 다음 사용해야 합니다.
2. Invoke 메서드는 Update 메서드보다 늦게 호출됩니다.
Invoke 메서드는 Update 메서드 이후에 호출됩니다. 따라서 Invoke로 예약한 메서드가 Update 메서드에서 수정한 값을 사용할 경우 문제가 발생할 수 있습니다. 이런 경우에는 코루틴을 사용하여 문제를 해결할 수 있습니다.
3. Invoke 메서드는 스레드에서 호출될 수 없습니다.
Invoke 메서드는 메인 스레드에서만 호출될 수 있습니다. 다른 스레드에서 Invoke 메서드를 호출하면 예외가 발생할 수 있습니다.
코루틴과 비교
- Invoke 메서드는 지정된 시간 후에 메서드를 한 번 호출합니다. 반면에 코루틴은 지정된 시간 간격으로 메서드를 반복해서 호출할 수 있습니다.
- Invoke 메서드는 Update 메서드 이후에 호출됩니다. 반면에 코루틴은 Update 메서드 이전에 호출됩니다.
- 코루틴은 yield 문을 사용하여 지정된 시간만큼 대기하는 등의 제어가 가능합니다. 반면에 Invoke 메서드는 지정된 시간이 지나면 메서드를 호출하고 끝입니다.
따라서, 반복 호출이 필요하거나 대기 시간을 제어하고 싶은 경우에는 코루틴을 사용하는 것이 좋습니다. 하지만 단순히 일정 시간 후에 한 번만 호출하면 되는 경우에는 Invoke 메서드를 사용하는 것이 더 간편합니다.
결론
Invoke 메서드는 Unity에서 자주 사용되는 기능 중 하나입니다. 이번 글에서는 Invoke 메서드를 사용하는 방법과 주의사항에 대해 알아보았습니다. Invoke 메서드의 사용 방법을 숙지하고, 주의사항을 잘 지켜서 게임 개발에 활용해 보세요.
'Unity' 카테고리의 다른 글
Unity : 사운드 재생 (0) | 2023.04.25 |
---|---|
Unity에서 Transform 컴포넌트와 RectTransform 컴포넌트의 차이점 (0) | 2023.04.24 |
Unity : UnityEngine.Pool 오브젝트 풀링 (0) | 2023.04.21 |
Unity Component : SpriteRenderer (0) | 2023.04.17 |
Unity - 씬 전환 시 파괴되지 않는 오브젝트 (0) | 2023.04.03 |