1 00:00:00,539 --> 00:00:02,706 Invoke は一定のディレイ(遅延)後に 2 00:00:02,706 --> 00:00:05,742 関数呼び出しをスケジュールする関数です 3 00:00:06,543 --> 00:00:08,543 この関数を利用することでタイミングが 4 00:00:08,543 --> 00:00:10,543 重要なシステムを便利に構築することができます 5 00:00:11,956 --> 00:00:14,827 いま表示されているのは空っぽのゲームオブジェクトが配置された Unity のシーンです 6 00:00:15,629 --> 00:00:18,520 このゲームオブジェクトには InvokeScript がアタッチされています 7 00:00:19,799 --> 00:00:21,799 この InvokeScript には 8 00:00:21,799 --> 00:00:24,176 public なゲームオブジェクト target があります 9 00:00:24,722 --> 00:00:27,552 またこの他にも SpawnObject というメソッドもあります 10 00:00:28,094 --> 00:00:30,522 SpawnObject メソッドは単純に target オブジェクトを 11 00:00:30,522 --> 00:00:34,424 位置 (0, 2, 0) でインスタンス化しています 12 00:00:35,882 --> 00:00:39,808 そして Start メソッドで Invoke 関数を呼び出しています 13 00:00:39,808 --> 00:00:42,439 Invoke 関数は 2 つのパラメーターを取ります 14 00:00:42,439 --> 00:00:45,687 呼び出したいメソッド名の文字列と 15 00:00:45,687 --> 00:00:48,638 ディレイとして指定したい秒数です 16 00:00:50,680 --> 00:00:53,921 つまりこの行では 2 秒後に SpawnObject メソッドが 17 00:00:53,921 --> 00:00:56,369 呼び出されるように指定されているわけです 18 00:00:57,740 --> 00:00:59,740 なお Invoke を使って呼び出せるのは 19 00:00:59,740 --> 00:01:01,740 パラメーターを取らず戻り値の型がない(void) 20 00:01:01,740 --> 00:01:04,806 メソッドのみです 21 00:01:05,959 --> 00:01:08,682 さて Unity に戻りシーンを実行してみましょう 22 00:01:09,751 --> 00:01:11,849 実行してみると 2 秒後にオーブが 23 00:01:11,849 --> 00:01:14,506 インスタンス化されて地面に落ちるのが確認できます 24 00:01:15,946 --> 00:01:18,871 確かにこれは一度メソッドを呼び出すには便利そうですが 25 00:01:18,871 --> 00:01:21,360 同じメソッドを何度も呼び出すときはどうしたらいいでしょう? 26 00:01:22,038 --> 00:01:23,831 そういった場合は 単純に 27 00:01:23,831 --> 00:01:25,831 InvokeRepeating 関数を使います 28 00:01:27,789 --> 00:01:29,789 このシーンでは同じ 空っぽの 29 00:01:29,789 --> 00:01:31,555 ゲームオブジェクトがあります 30 00:01:31,555 --> 00:01:33,877 ただし今回アタッチされているスクリプトは 31 00:01:33,877 --> 00:01:35,877 InvokeRepeatingScript です 32 00:01:37,544 --> 00:01:39,724 InvokeRepeatingScript の中は 33 00:01:39,724 --> 00:01:41,724 基本的に InvokeScript とほぼ同じ構造で 34 00:01:41,724 --> 00:01:44,193 作られているのが見えるでしょうか 35 00:01:45,571 --> 00:01:48,668 引き続き target という名前の public なゲームオブジェクトがあり 36 00:01:48,668 --> 00:01:51,015 SpawnObject メソッドもあります 37 00:01:51,626 --> 00:01:53,626 そしてこのスクリプトの SpawnObject メソッドも 38 00:01:53,626 --> 00:01:55,821 target オブジェクトをインスタンス化していますが 39 00:01:55,821 --> 00:01:59,247 今回は X と Z の座標がランダムになっています 40 00:02:01,066 --> 00:02:03,066 さてこのスクリプトの Start メソッドは 41 00:02:03,066 --> 00:02:04,786 InvokeRepeating 関数を呼び出しています 42 00:02:05,372 --> 00:02:07,372 この関数は 3 つの引数を取ります 43 00:02:07,372 --> 00:02:09,149 最初は呼び出したい 44 00:02:09,149 --> 00:02:10,619 メソッド名の文字列 45 00:02:10,619 --> 00:02:13,428 次に メソッドを呼び出すまで待機する秒数 46 00:02:13,428 --> 00:02:15,235 最後にメソッドを繰り返し呼び出す際の 47 00:02:15,235 --> 00:02:17,235 間隔となる秒数です 48 00:02:18,985 --> 00:02:20,985 つまりこの行では 2 秒後に SpawnObject メソッドが 49 00:02:20,985 --> 00:02:23,316 呼び出され その後は 50 00:02:23,316 --> 00:02:25,760 1 秒ごとに繰り返し 呼び出されます 51 00:02:27,802 --> 00:02:29,130 では実際に見てみましょう 52 00:02:30,371 --> 00:02:32,136 このシーンは Unity 上でそのまま実行できます 53 00:02:32,704 --> 00:02:36,570 実行するとまず 2 秒後にオーブがインスタンス化され 54 00:02:36,570 --> 00:02:38,750 その後は 1 秒ごとに 55 00:02:38,750 --> 00:02:40,750 新たなオーブが作成されていきます 56 00:02:42,181 --> 00:02:44,181 オーブは無限に生成されていくので 57 00:02:44,181 --> 00:02:46,181 やがてシーンがオーブで埋め尽くされます 58 00:02:47,778 --> 00:02:49,778 というわけで InvokeRepeating で呼び出した 59 00:02:49,778 --> 00:02:51,778 メソッドをどのように止めるかを 60 00:02:51,778 --> 00:02:53,778 理解しておくことは重要です 61 00:02:55,181 --> 00:02:57,181 このスクリプトによる Invoke コールの 62 00:02:57,181 --> 00:02:59,181 全インスタンスを止めるには 63 00:02:59,181 --> 00:03:01,880 CancelInvoke メソッドを使います 64 00:03:03,112 --> 00:03:06,049 なお特定の Invoke だけを止めたい場合は 65 00:03:06,049 --> 00:03:08,049 止めたいメソッドの名前を含む文字列を 66 00:03:08,049 --> 00:03:10,049 パースすることもできます