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