「毎日Unity」の技術ブログ

開発で役立つ情報を発信する

【UnityC#】Invokeの使い方

今回はInvokeの使い方についてまとめてみました。

[ Invoke ]

Invokeは指定した関数を指定した秒数後に呼び出すことができます。
下記は3秒後にコンソールに「3秒後に呼び出されるよ!」と出力するスクリプトです。

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

public class ScriptTest : MonoBehaviour
{
    void Start()
    {
        //FunctionTestを3秒後に呼び出します。
        Invoke("FunctionTest", 3f);
    }

    void FunctionTest()
    {
        Debug.Log("3秒後に呼び出されるよ!");
    }
}

[ InvokeRepeating ]

InvokeRepeatingは指定した関数を指定した秒数毎に呼び出すことができます。
下記は3秒毎にコンソールに「3秒毎に呼び出されるよ!」と出力するスクリプトです。

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

public class ScriptTest : MonoBehaviour
{
    void Start()
    {
        //FunctionTestを3秒毎に呼び出します。
        InvokeRepeating("FunctionTest", 0f, 3f);
    }

    void FunctionTest()
    {
        Debug.Log("3秒毎に呼び出されるよ!");
    }
}

[ CancelInvoke ]

CancelInvokeはInvokeやInvokeRepeatingの呼び出しを無効化できます。
下記は3秒後にコンソールに「3秒後に呼び出されるよ!」と出力するスクリプトです。しかしスペースキーを3秒以内に押せばコンソールに出力するのを無効化できます。

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

public class ScriptTest : MonoBehaviour
{
    void Start()
    {
        //FunctionTestを3秒後に呼び出します。
        Invoke("FunctionTest", 3f);
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            CancelInvoke("FunctionTest");
        }
    }

    void FunctionTest()
    {
        Debug.Log("3秒後に呼び出されるよ!");
    }
}

[ IsInvoking ]

IsInvokingはInvokeやInvokeRepeatingの呼び出しの有無を判別できます。
下記は3秒後にコンソールに「3秒後に呼び出されるよ!」と出力するスクリプトです。スペースキーを3秒以内に押すとコンソールに「FunctionTestは呼ばれるよ!」と出力します。3秒経った後に押すとコンソールに「FunctionTestは呼ばれないよ!」と出力します。

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

public class ScriptTest : MonoBehaviour
{
    void Start()
    {
        //FunctionTestを3秒後に呼び出します。
        Invoke("FunctionTest", 3f);
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (IsInvoking("FunctionTest"))
            {
                Debug.Log("FunctionTestは呼び出されるよ!");
            }
            else
            {
                Debug.Log("FunctionTestは呼び出されないよ!");
            }
        }
    }

    void FunctionTest()
    {
        Debug.Log("3秒後に呼び出されるよ!");
    }
}