【Unity】1秒ごとに処理を繰り返す

一定時間ごとに処理を繰り返したい場合について幾つかのパターンを紹介しています
今回は、一番単純な繰り返しの処理と途中で終わらせることができる方法について考えてみます

コード

シンプルな繰り返しの形

1秒ごとにコンソール画面に「繰り返し」と表示されます

using UnityEngine;

public class RepeatCreation : MonoBehaviour
{
    private void Start()
    {
        InvokeRepeating("RepeatMsg", 0, 1);
    }

    void RepeatMsg()
    {
        Debug.Log("繰り返し");
    }
}

繰り返しを始める、繰り返しを止めるの2つの機能を追加したコード

using System;
using UnityEngine;

public class RepeatCreation : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.S))
        {
            StartCreation();
        }

        if (Input.GetKeyDown(KeyCode.E))
        {
            StopCreation();
        }
    }

    public void StartCreation()
    {
        InvokeRepeating(nameof(RepeatMsg), 0, 1);
    }

    public void StopCreation()
    {
        CancelInvoke();
    }

    void RepeatMsg()
    {
        Debug.Log("繰り返し");
    }
}

解説

指定されたメソッドを繰り返し実行する

// InvokeRepeating("RepeatMsg", 0, 1);と同じ
InvokeRepeating(nameof(RepeatMsg), 0, 1);

Repaet()メソッドを繰り返し実行するように指示します


InvokeRepeatingの第1引数は文字列型になります
nameof(RepeatMsg)としてRepeatMsgメソッドの名前を文字列として取得して代入しています
文字列を直接記述するとVisualStudioでエラーチェックがされないための対処になります

第2引数は、最初開始するまでの遅延時間の設定です(秒)

第3引数は、繰り返しの間隔(秒)になります

繰り返し処理を止める(キャンセルする)

CancelInvoke();

実行されている繰り返し処理を止めます

参考

いろいろな繰り返しパターン

Unity

Posted by hidepon