Invoke は一定のディレイ(遅延)後に 関数呼び出しをスケジュールする関数です この関数を利用することでタイミングが 重要なシステムを便利に構築することができます いま表示されているのは空っぽのゲームオブジェクトが配置された Unity のシーンです このゲームオブジェクトには InvokeScript がアタッチされています この InvokeScript には public なゲームオブジェクト target があります またこの他にも SpawnObject というメソッドもあります SpawnObject メソッドは単純に target オブジェクトを 位置 (0, 2, 0) でインスタンス化しています そして Start メソッドで Invoke 関数を呼び出しています Invoke 関数は 2 つのパラメーターを取ります 呼び出したいメソッド名の文字列と ディレイとして指定したい秒数です つまりこの行では 2 秒後に SpawnObject メソッドが 呼び出されるように指定されているわけです なお Invoke を使って呼び出せるのは パラメーターを取らず戻り値の型がない(void) メソッドのみです さて Unity に戻りシーンを実行してみましょう 実行してみると 2 秒後にオーブが インスタンス化されて地面に落ちるのが確認できます 確かにこれは一度メソッドを呼び出すには便利そうですが 同じメソッドを何度も呼び出すときはどうしたらいいでしょう? そういった場合は 単純に InvokeRepeating 関数を使います このシーンでは同じ 空っぽの ゲームオブジェクトがあります ただし今回アタッチされているスクリプトは InvokeRepeatingScript です InvokeRepeatingScript の中は 基本的に InvokeScript とほぼ同じ構造で 作られているのが見えるでしょうか 引き続き target という名前の public なゲームオブジェクトがあり SpawnObject メソッドもあります そしてこのスクリプトの SpawnObject メソッドも target オブジェクトをインスタンス化していますが 今回は X と Z の座標がランダムになっています さてこのスクリプトの Start メソッドは InvokeRepeating 関数を呼び出しています この関数は 3 つの引数を取ります 最初は呼び出したい メソッド名の文字列 次に メソッドを呼び出すまで待機する秒数 最後にメソッドを繰り返し呼び出す際の 間隔となる秒数です つまりこの行では 2 秒後に SpawnObject メソッドが 呼び出され その後は 1 秒ごとに繰り返し 呼び出されます では実際に見てみましょう このシーンは Unity 上でそのまま実行できます 実行するとまず 2 秒後にオーブがインスタンス化され その後は 1 秒ごとに 新たなオーブが作成されていきます オーブは無限に生成されていくので やがてシーンがオーブで埋め尽くされます というわけで InvokeRepeating で呼び出した メソッドをどのように止めるかを 理解しておくことは重要です このスクリプトによる Invoke コールの 全インスタンスを止めるには CancelInvoke メソッドを使います なお特定の Invoke だけを止めたい場合は 止めたいメソッドの名前を含む文字列を パースすることもできます