0:00:00.539,0:00:02.706 Invoke は一定のディレイ(遅延)後に 0:00:02.706,0:00:05.742 関数呼び出しをスケジュールする関数です 0:00:06.543,0:00:08.543 この関数を利用することでタイミングが 0:00:08.543,0:00:10.543 重要なシステムを便利に構築することができます 0:00:11.956,0:00:14.827 いま表示されているのは空っぽのゲームオブジェクトが配置された Unity のシーンです 0:00:15.629,0:00:18.520 このゲームオブジェクトには InvokeScript がアタッチされています 0:00:19.799,0:00:21.799 この InvokeScript には 0:00:21.799,0:00:24.176 public なゲームオブジェクト target があります 0:00:24.722,0:00:27.552 またこの他にも SpawnObject というメソッドもあります 0:00:28.094,0:00:30.522 SpawnObject メソッドは単純に target オブジェクトを 0:00:30.522,0:00:34.424 位置 (0, 2, 0) でインスタンス化しています 0:00:35.882,0:00:39.808 そして Start メソッドで Invoke 関数を呼び出しています 0:00:39.808,0:00:42.439 Invoke 関数は 2 つのパラメーターを取ります 0:00:42.439,0:00:45.687 呼び出したいメソッド名の文字列と 0:00:45.687,0:00:48.638 ディレイとして指定したい秒数です 0:00:50.680,0:00:53.921 つまりこの行では 2 秒後に SpawnObject メソッドが 0:00:53.921,0:00:56.369 呼び出されるように指定されているわけです 0:00:57.740,0:00:59.740 なお Invoke を使って呼び出せるのは 0:00:59.740,0:01:01.740 パラメーターを取らず戻り値の型がない(void) 0:01:01.740,0:01:04.806 メソッドのみです 0:01:05.959,0:01:08.682 さて Unity に戻りシーンを実行してみましょう 0:01:09.751,0:01:11.849 実行してみると 2 秒後にオーブが 0:01:11.849,0:01:14.506 インスタンス化されて地面に落ちるのが確認できます 0:01:15.946,0:01:18.871 確かにこれは一度メソッドを呼び出すには便利そうですが 0:01:18.871,0:01:21.360 同じメソッドを何度も呼び出すときはどうしたらいいでしょう? 0:01:22.038,0:01:23.831 そういった場合は 単純に 0:01:23.831,0:01:25.831 InvokeRepeating 関数を使います 0:01:27.789,0:01:29.789 このシーンでは同じ 空っぽの 0:01:29.789,0:01:31.555 ゲームオブジェクトがあります 0:01:31.555,0:01:33.877 ただし今回アタッチされているスクリプトは 0:01:33.877,0:01:35.877 InvokeRepeatingScript です 0:01:37.544,0:01:39.724 InvokeRepeatingScript の中は 0:01:39.724,0:01:41.724 基本的に InvokeScript とほぼ同じ構造で 0:01:41.724,0:01:44.193 作られているのが見えるでしょうか 0:01:45.571,0:01:48.668 引き続き target という名前の public なゲームオブジェクトがあり 0:01:48.668,0:01:51.015 SpawnObject メソッドもあります 0:01:51.626,0:01:53.626 そしてこのスクリプトの SpawnObject メソッドも 0:01:53.626,0:01:55.821 target オブジェクトをインスタンス化していますが 0:01:55.821,0:01:59.247 今回は X と Z の座標がランダムになっています 0:02:01.066,0:02:03.066 さてこのスクリプトの Start メソッドは 0:02:03.066,0:02:04.786 InvokeRepeating 関数を呼び出しています 0:02:05.372,0:02:07.372 この関数は 3 つの引数を取ります 0:02:07.372,0:02:09.149 最初は呼び出したい 0:02:09.149,0:02:10.619 メソッド名の文字列 0:02:10.619,0:02:13.428 次に メソッドを呼び出すまで待機する秒数 0:02:13.428,0:02:15.235 最後にメソッドを繰り返し呼び出す際の 0:02:15.235,0:02:17.235 間隔となる秒数です 0:02:18.985,0:02:20.985 つまりこの行では 2 秒後に SpawnObject メソッドが 0:02:20.985,0:02:23.316 呼び出され その後は 0:02:23.316,0:02:25.760 1 秒ごとに繰り返し 呼び出されます 0:02:27.802,0:02:29.130 では実際に見てみましょう 0:02:30.371,0:02:32.136 このシーンは Unity 上でそのまま実行できます 0:02:32.704,0:02:36.570 実行するとまず 2 秒後にオーブがインスタンス化され 0:02:36.570,0:02:38.750 その後は 1 秒ごとに 0:02:38.750,0:02:40.750 新たなオーブが作成されていきます 0:02:42.181,0:02:44.181 オーブは無限に生成されていくので 0:02:44.181,0:02:46.181 やがてシーンがオーブで埋め尽くされます 0:02:47.778,0:02:49.778 というわけで InvokeRepeating で呼び出した 0:02:49.778,0:02:51.778 メソッドをどのように止めるかを 0:02:51.778,0:02:53.778 理解しておくことは重要です 0:02:55.181,0:02:57.181 このスクリプトによる Invoke コールの 0:02:57.181,0:02:59.181 全インスタンスを止めるには 0:02:59.181,0:03:01.880 CancelInvoke メソッドを使います 0:03:03.112,0:03:06.049 なお特定の Invoke だけを止めたい場合は 0:03:06.049,0:03:08.049 止めたいメソッドの名前を含む文字列を 0:03:08.049,0:03:10.049 パースすることもできます