Invoke("메서드이름", 딜레이시간);
메서드이름
: 호출할 메서드의 이름을 문자열로 입력합니다.딜레이시간
: 호출할 메서드가 몇 초 후에 실행될지를 설정합니다.유니티의 Invoke 메서드는 특정 메서드를 일정 시간 후에 호출하도록 예약하는 기능을 제공합니다. 주로 MonoBehaviour 클래스에서 사용할 수 있으며, 딜레이를 적용하여 메서드를 실행할 때 유용합니다.
예제코드
using UnityEngine;
public class InvokeExample : MonoBehaviour
{
void Start()
{
Invoke("PrintMessage", 2f); // 2초 후에 PrintMessage를 호출
}
void PrintMessage()
{
Debug.Log("Invoke 호출됨!");
}
}
// 이 코드에서는 유니티가 Start 메서드를 호출한 후 2초가 지나면 PrintMessage 메서드가 실행됩니다.
InvokeRepeating("메서드이름", 초기딜레이시간, 반복주기);
using UnityEngine;
public class InvokeRepeatingExample : MonoBehaviour
{
void Start()
{
InvokeRepeating("PrintMessage", 1f, 2f); // 1초 후부터 시작, 2초 간격으로 호출
}
void PrintMessage()
{
Debug.Log("반복 호출 중!");
}
}
// 이 코드에서는 PrintMessage 메서드가 1초 후에 시작하고, 이후 2초 간격으로 계속 호출됩니다.
CancelInvoke("메서드이름");
CancelInvoke();
C#에서 델리게이트(delegate)나 이벤트(event)를 호출하는 메서드입니다. 주로 델리게이트나 이벤트에 연결된 메서드들을 실행할 때 사용합니다.
델리게이트와 이벤트
델리게이트는 특정 메서드의 참조를 저장할 수 있는 타입이며, 이벤트는 델리게이트의 일종으로 주로 사용자 상호작용이나 특정 조건이 발생할 때 이를 다른 메서드들이 처리할 수 있도록 합니다.
.Invoke()는 이러한 델리게이트나 이벤트를 호출해, 연결된 메서드를 실행합니다.
델리게이트와 이벤트의 실제 사용에서 .Invoke()는 상황에 따라 여러 메서드를 실행할 수 있도록 하여, 코드의 유연성과 재사용성을 높입니다.
예제코드
public delegate void MyDelegate(); // 델리게이트 정의
public MyDelegate myDelegate; // 델리게이트 인스턴스 생성
void Start()
{
myDelegate = MyMethod; // 델리게이트에 메서드 연결
myDelegate.Invoke(); // 연결된 메서드 호출 (MyMethod가 실행됨)
}
void MyMethod()
{
Debug.Log("MyMethod 호출됨!");
}
- myDelegate 델리게이트에 MyMethod 메서드를 연결했습니다.
- myDelegate.Invoke()를 호출하면 MyMethod가 실행됩니다.
.Invoke()
없이도 델리게이트를 호출할 수 있습니다.?.Invoke()
와 같이 사용하면 안전하게 예외를 피할 수 있습니다.?.Invoke()
를 사용하면 델리게이트나 이벤트가 null인지 확인하고 호출할 수 있어, NullReferenceException 예외를 방지할 수 있습니다.사용 예
.Invoke()와 Invoke("메서드이름", 딜레이시간)는 비슷한 이름을 가지고 있지만, 서로 다른 용도로 사용됩니다.
public delegate void MyDelegate();
public MyDelegate myDelegate;
void Start()
{
myDelegate = MyMethod;
myDelegate.Invoke(); // MyMethod가 바로 실행됩니다.
}
void MyMethod()
{
Debug.Log("MyMethod가 호출됨!");
}
using UnityEngine;
public class InvokeExample : MonoBehaviour
{
void Start()
{
Invoke("DelayedMethod", 2f); // 2초 후에 DelayedMethod가 호출됩니다.
}
void DelayedMethod()
{
Debug.Log("DelayedMethod가 호출됨!");
}
}