-
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 だけを止めたい場合は
-
止めたいメソッドの名前を含む文字列を
-
パースすることもできます