본문 바로가기
유니티/기초

유니티 Invoke

by 노튜 2020. 12. 1.
728x90

1. Invoke()

 이전 글에서는 시간의 경과에 따른 절차적 단계를 수행하는 로직을 구현하는 데 사용되는 함수로 Update 함수들과 Coroutine을 언급하였다. 이 함수들에 시간을 지연시키는 로직을 구현할 수 있다. 이러한 지연시키는 로직을 간단하게 구현한 함수가 Invoke() 함수이다. 

 

 Invoke() 함수는 지정 시간 이후에 대상 함수를 호출한다.

또한, 일정 시간 후에 반복적으로 해당 함수를 호출하도록 구현한 InvokeRepeating() 함수와 같은 추가적인 함수들을 제공한다.



  • Invoke(string methodName, float delayTime)
  • InvokeRepeating(string methodName, float delayTime, float repeatRateTime )

 

  • IsInvoking() : MonoBehaviour에 연결된 Invoke 함수를 확인한다.
  • IsInvoking(string methodName)  해당 이름의 Invoke 함수를 확인한다. 

 

  • CancelInvoke() : MonoBehaviour에 연결된 모든 Invoke 함수를 정지한다.
  • CancelInvoke(string methodName) : MonoBehaviour에 연결된 해당 이름의 모든 Invoke 함수를 정지한다.

 

유니티는 Invoke 함수 대신 Coroutine 함수를 사용할 것을 권장한다. Coroutine 함수가 성능 항샹, 가독성, 유지보수에 용이하기 때문이다. 

 

2. Invoke() 예제

Invoke 함수는 MonoBehaviour 클래스의 함수이다.

따라서 사용은 아래와 같이 사용 가능하다. 

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class InvokeExample : MonoBehaviour
{
    float time;

    // Start is called before the first frame update
    void Start()
    {
        time = 3.0f;
        Invoke("MyInvoke", 1.2f);
        InvokeRepeating("MyRepeatInvoke", 1.0f, 1.0f);

        Debug.Log("Invoking Check:" + IsInvoking());
    }

    // Update is called once per frame
    void Update()
    {
        time -= Time.deltaTime;
        if (time < 0)
        {
            CancelInvoke();
        }
    }

    void MyInvoke()
    {
        Debug.Log("MyInvoke");
    }
    void MyRepeatInvoke()
    {
        Debug.Log("MyRePeatInvoke"); 
    }
}

 

728x90