[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.54,0:00:02.71,Default,,0000,0000,0000,,Invoke は一定のディレイ(遅延)後に Dialogue: 0,0:00:02.71,0:00:05.74,Default,,0000,0000,0000,,関数呼び出しをスケジュールする関数です Dialogue: 0,0:00:06.54,0:00:08.54,Default,,0000,0000,0000,,この関数を利用することでタイミングが Dialogue: 0,0:00:08.54,0:00:10.54,Default,,0000,0000,0000,,重要なシステムを便利に構築することができます Dialogue: 0,0:00:11.96,0:00:14.83,Default,,0000,0000,0000,,いま表示されているのは空っぽのゲームオブジェクトが配置された Unity のシーンです Dialogue: 0,0:00:15.63,0:00:18.52,Default,,0000,0000,0000,,このゲームオブジェクトには InvokeScript がアタッチされています Dialogue: 0,0:00:19.80,0:00:21.80,Default,,0000,0000,0000,,この InvokeScript には Dialogue: 0,0:00:21.80,0:00:24.18,Default,,0000,0000,0000,,public なゲームオブジェクト target があります Dialogue: 0,0:00:24.72,0:00:27.55,Default,,0000,0000,0000,,またこの他にも SpawnObject というメソッドもあります Dialogue: 0,0:00:28.09,0:00:30.52,Default,,0000,0000,0000,,SpawnObject メソッドは単純に target オブジェクトを Dialogue: 0,0:00:30.52,0:00:34.42,Default,,0000,0000,0000,,位置 (0, 2, 0) でインスタンス化しています Dialogue: 0,0:00:35.88,0:00:39.81,Default,,0000,0000,0000,,そして Start メソッドで Invoke 関数を呼び出しています Dialogue: 0,0:00:39.81,0:00:42.44,Default,,0000,0000,0000,,Invoke 関数は 2 つのパラメーターを取ります Dialogue: 0,0:00:42.44,0:00:45.69,Default,,0000,0000,0000,,呼び出したいメソッド名の文字列と Dialogue: 0,0:00:45.69,0:00:48.64,Default,,0000,0000,0000,,ディレイとして指定したい秒数です Dialogue: 0,0:00:50.68,0:00:53.92,Default,,0000,0000,0000,,つまりこの行では 2 秒後に SpawnObject メソッドが Dialogue: 0,0:00:53.92,0:00:56.37,Default,,0000,0000,0000,,呼び出されるように指定されているわけです Dialogue: 0,0:00:57.74,0:00:59.74,Default,,0000,0000,0000,,なお Invoke を使って呼び出せるのは Dialogue: 0,0:00:59.74,0:01:01.74,Default,,0000,0000,0000,,パラメーターを取らず戻り値の型がない(void) Dialogue: 0,0:01:01.74,0:01:04.81,Default,,0000,0000,0000,,メソッドのみです Dialogue: 0,0:01:05.96,0:01:08.68,Default,,0000,0000,0000,,さて Unity に戻りシーンを実行してみましょう Dialogue: 0,0:01:09.75,0:01:11.85,Default,,0000,0000,0000,,実行してみると 2 秒後にオーブが Dialogue: 0,0:01:11.85,0:01:14.51,Default,,0000,0000,0000,,インスタンス化されて地面に落ちるのが確認できます Dialogue: 0,0:01:15.95,0:01:18.87,Default,,0000,0000,0000,,確かにこれは一度メソッドを呼び出すには便利そうですが Dialogue: 0,0:01:18.87,0:01:21.36,Default,,0000,0000,0000,,同じメソッドを何度も呼び出すときはどうしたらいいでしょう? Dialogue: 0,0:01:22.04,0:01:23.83,Default,,0000,0000,0000,,そういった場合は 単純に Dialogue: 0,0:01:23.83,0:01:25.83,Default,,0000,0000,0000,,InvokeRepeating 関数を使います Dialogue: 0,0:01:27.79,0:01:29.79,Default,,0000,0000,0000,,このシーンでは同じ 空っぽの Dialogue: 0,0:01:29.79,0:01:31.56,Default,,0000,0000,0000,,ゲームオブジェクトがあります Dialogue: 0,0:01:31.56,0:01:33.88,Default,,0000,0000,0000,,ただし今回アタッチされているスクリプトは Dialogue: 0,0:01:33.88,0:01:35.88,Default,,0000,0000,0000,,InvokeRepeatingScript です Dialogue: 0,0:01:37.54,0:01:39.72,Default,,0000,0000,0000,,InvokeRepeatingScript の中は Dialogue: 0,0:01:39.72,0:01:41.72,Default,,0000,0000,0000,,基本的に InvokeScript とほぼ同じ構造で Dialogue: 0,0:01:41.72,0:01:44.19,Default,,0000,0000,0000,,作られているのが見えるでしょうか Dialogue: 0,0:01:45.57,0:01:48.67,Default,,0000,0000,0000,,引き続き target という名前の public なゲームオブジェクトがあり Dialogue: 0,0:01:48.67,0:01:51.02,Default,,0000,0000,0000,,SpawnObject メソッドもあります Dialogue: 0,0:01:51.63,0:01:53.63,Default,,0000,0000,0000,,そしてこのスクリプトの SpawnObject メソッドも Dialogue: 0,0:01:53.63,0:01:55.82,Default,,0000,0000,0000,,target オブジェクトをインスタンス化していますが Dialogue: 0,0:01:55.82,0:01:59.25,Default,,0000,0000,0000,,今回は X と Z の座標がランダムになっています Dialogue: 0,0:02:01.07,0:02:03.07,Default,,0000,0000,0000,,さてこのスクリプトの Start メソッドは Dialogue: 0,0:02:03.07,0:02:04.79,Default,,0000,0000,0000,,InvokeRepeating 関数を呼び出しています Dialogue: 0,0:02:05.37,0:02:07.37,Default,,0000,0000,0000,,この関数は 3 つの引数を取ります Dialogue: 0,0:02:07.37,0:02:09.15,Default,,0000,0000,0000,,最初は呼び出したい Dialogue: 0,0:02:09.15,0:02:10.62,Default,,0000,0000,0000,,メソッド名の文字列 Dialogue: 0,0:02:10.62,0:02:13.43,Default,,0000,0000,0000,,次に メソッドを呼び出すまで待機する秒数 Dialogue: 0,0:02:13.43,0:02:15.24,Default,,0000,0000,0000,,最後にメソッドを繰り返し呼び出す際の Dialogue: 0,0:02:15.24,0:02:17.24,Default,,0000,0000,0000,,間隔となる秒数です Dialogue: 0,0:02:18.98,0:02:20.98,Default,,0000,0000,0000,,つまりこの行では 2 秒後に SpawnObject メソッドが Dialogue: 0,0:02:20.98,0:02:23.32,Default,,0000,0000,0000,,呼び出され その後は Dialogue: 0,0:02:23.32,0:02:25.76,Default,,0000,0000,0000,,1 秒ごとに繰り返し 呼び出されます Dialogue: 0,0:02:27.80,0:02:29.13,Default,,0000,0000,0000,,では実際に見てみましょう Dialogue: 0,0:02:30.37,0:02:32.14,Default,,0000,0000,0000,,このシーンは Unity 上でそのまま実行できます Dialogue: 0,0:02:32.70,0:02:36.57,Default,,0000,0000,0000,,実行するとまず 2 秒後にオーブがインスタンス化され Dialogue: 0,0:02:36.57,0:02:38.75,Default,,0000,0000,0000,,その後は 1 秒ごとに Dialogue: 0,0:02:38.75,0:02:40.75,Default,,0000,0000,0000,,新たなオーブが作成されていきます Dialogue: 0,0:02:42.18,0:02:44.18,Default,,0000,0000,0000,,オーブは無限に生成されていくので Dialogue: 0,0:02:44.18,0:02:46.18,Default,,0000,0000,0000,,やがてシーンがオーブで埋め尽くされます Dialogue: 0,0:02:47.78,0:02:49.78,Default,,0000,0000,0000,,というわけで InvokeRepeating で呼び出した Dialogue: 0,0:02:49.78,0:02:51.78,Default,,0000,0000,0000,,メソッドをどのように止めるかを Dialogue: 0,0:02:51.78,0:02:53.78,Default,,0000,0000,0000,,理解しておくことは重要です Dialogue: 0,0:02:55.18,0:02:57.18,Default,,0000,0000,0000,,このスクリプトによる Invoke コールの Dialogue: 0,0:02:57.18,0:02:59.18,Default,,0000,0000,0000,,全インスタンスを止めるには Dialogue: 0,0:02:59.18,0:03:01.88,Default,,0000,0000,0000,,CancelInvoke メソッドを使います Dialogue: 0,0:03:03.11,0:03:06.05,Default,,0000,0000,0000,,なお特定の Invoke だけを止めたい場合は Dialogue: 0,0:03:06.05,0:03:08.05,Default,,0000,0000,0000,,止めたいメソッドの名前を含む文字列を Dialogue: 0,0:03:08.05,0:03:10.05,Default,,0000,0000,0000,,パースすることもできます