본문 바로가기
개발/Unity

유니티 - 인보크로 일정 시간 이후 함수 실행하기, 반복하기 (Invoke)

by 피로물든딸기 2022. 7. 16.
반응형

Unity 전체 링크

 

Invoke 함수는 간단하게 함수를 지연 시간 이후 실행하거나 반복할 수 있어 편리하다.

하지만 코루틴(Coroutine)과 다르게 매개변수를 받을 수 없고, 성능도 느리다는 단점이 있다.

 

Invoke와 관련된 함수는 아래와 같이 6개가 있다.

실행 / 반복 / 취소 / 확인으로 나뉜다.

 

void Invoke(string methodName, float time)

ㄴ methodName 함수를 time 뒤에 실행한다.

 

void InvokeRepeating(string methodName, float time, float repeatRate)

ㄴ methodName 함수를 time 뒤에 repeatRate마다 호출한다.


void CancelInvoke();

ㄴ 모든 Invoke를 취소한다.

 

void CancelInvoke(string methodName);

ㄴ methodName Invoke만 취소한다.


bool IsInvoking();

ㄴ 현재 유니티 씬에서 Invoke 함수가 실행 중인지 체크한다.

 

bool IsInvoking(string methodName);

ㄴ 현재 유니티 씬에서 methodName Invoke 함수가 실행 중인지 체크한다.

 

위의 내용을 바탕으로 InvokeTest.cs를 만든다.

진행된 시간을 알기 위해 TextMeshProUGUI로 간단한 스톱워치를 만들었다.

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

public class InvokeTest : MonoBehaviour
{
    public TextMeshProUGUI timer;

    float time;

    void myInvoke()
    {
        string ct = string.Format("{0:N3}", time);
        Debug.Log("Current Time : " + ct + " / Invoke ? " + IsInvoking());    
    }

    void Start()
    {
        Invoke("myInvoke", 1f); // 1초 뒤 시작

        InvokeRepeating("myInvoke", 2f, 3f); // 2초 뒤 시작하고, 3초마다 반복.           
    }

    void Update()
    {
        time += Time.deltaTime;

        timer.text = string.Format("{0:N3} s", time);

        if (time > 10f)
        {
            if(IsInvoking("myInvoke"))
            {
                CancelInvoke(); // 모든 Invoke 종료.
                //CancelInvoke("myInvoke"); //특정 함수만 종료

                Debug.Log(
                    "myInvoke end : " + string.Format("{0:N3}", time) + " / Invoke ? " + IsInvoking()
                    );
            }
        }
    }
}

 

Canvas - Text(TMP)를 추가한 후, 빈 오브젝트에 스크립트를 추가하고 아래와 같이 설정한 후, 게임을 실행하자.

 

1초 뒤에 함수가 실행되었다.

2초 뒤에 다시 실행되었고, 3초마다 반복 후, 10초 뒤에는 더 이상 실행되지 않는다.

 

Unity Plus:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글