﻿1
00:00:04,350 --> 00:00:05,040
‫こんにちは､ ようこそ｡

2
00:00:05,040 --> 00:00:15,030
‫この講義では､ フォロワーやナビゲート､ 障害物の回避､ そして一般的にちょっと迷惑な存在になるためのアイに迫っていきます｡

3
00:00:15,030 --> 00:00:17,520
‫どうしてそんなことが可能なのか､ 掘り下げて考えてみましょう｡

4
00:00:18,360 --> 00:00:27,460
‫ですから､ ここで整理しなければならないパズルの最も明白な､ 次のピースは､ 視線をこちらに向かわせることなのです｡

5
00:00:27,480 --> 00:00:29,100
‫ただ立っているだけではダメなんです｡

6
00:00:29,130 --> 00:00:31,770
‫また､ 動くことも必要で､ その上でシュートも必要になってくる｡

7
00:00:31,770 --> 00:00:34,800
‫まず､ どうすれば動きができるかを考えましょう｡

8
00:00:35,340 --> 00:00:45,210
‫たとえば､ 私がこの廊下に隠れていて､ そこに行きたいとします｡

9
00:00:45,240 --> 00:00:48,540
‫ただ壁を通り抜ければいいというものではないことを知る必要があるのです｡

10
00:00:48,540 --> 00:00:53,880
‫障害物を回避してこちらに向かってくるようなルートを計画する必要がありそうだ｡

11
00:00:54,210 --> 00:01:01,260
‫一般的なゲーム､ 特に Unreal では､ レベル内の歩行可能な場所を示すメッシュを生成し､

12
00:01:01,260 --> 00:01:10,440
‫さまざまなアルゴリズム (その 1 つはスター パス検索と呼ばれます) を使用しています｡

13
00:01:10,440 --> 00:01:18,190
‫このメッシュ上でナビゲーションを行い､ ルートプランを作成すると､ AIはこのルートプランを使って移動することができます｡

14
00:01:18,210 --> 00:01:20,360
‫というのが､ その概要のようなものです｡

15
00:01:20,370 --> 00:01:22,260
‫幸いなことに､ その多くは私たちのために行われています｡

16
00:01:22,260 --> 00:01:24,020
‫これを一からコーディングする必要はない｡

17
00:01:24,030 --> 00:01:28,290
‫そこで必要なのは､ まずナビメッシュが見えるようにすることです｡

18
00:01:28,290 --> 00:01:32,780
‫そして､ 今のところ十分なメッシュが見えないのは､ 部分的にメッシュがないためです｡

19
00:01:32,790 --> 00:01:40,260
‫そこで必要なのは､ 配置されたアクターのウィンドウを見ることです｡ つまり､ ウィンドウに移動して､ 配置されたアクターを探します｡

20
00:01:40,620 --> 00:01:47,190
‫ナビメッシュを検索する必要があり､ ナビメッシュのバウンズボリュームを検索しています｡

21
00:01:47,190 --> 00:01:54,090
‫これでボリューム､ つまり箱のようなものができ､ その箱の中にあるものはすべて､ 基本的に平らかどうか､ 急すぎないかどうか､

22
00:01:54,090 --> 00:01:58,380
‫ナビゲート可能かどうかがチェックされることになります｡

23
00:01:58,950 --> 00:02:04,010
‫基本的に壁があるところでは､ 壁を通り抜けることはできませんし､ 壁の上は急勾配で歩けないんです｡

24
00:02:04,020 --> 00:02:09,090
‫ナビメッシュの境界ボリュームをドラッグして､ ここに持ってきて､

25
00:02:09,090 --> 00:02:21,120
‫床を少し通して､ 床をナビ計算の一部にできるようにしたら､ 次はナビメッシュの可視性を有効にする必要があるわけです｡

26
00:02:21,120 --> 00:02:25,890
‫ビューポートの左上にある表示ボタンをクリックしてから､ ナビゲーションをクリックするか､

27
00:02:25,890 --> 00:02:28,110
‫ショートカットを使用することで行えます｡

28
00:02:28,110 --> 00:02:29,880
‫P だから､ ショートカットを使うんだ｡

29
00:02:29,880 --> 00:02:33,870
‫P そして､ うまく選択すると､ バウンズボリュームを選択する必要もない｡

30
00:02:33,870 --> 00:02:40,800
‫この緑色のメッシュがバウンズボリューム内に現れたことで､ このエリアが歩行可能なエリアであることがすぐに分かります｡

31
00:02:40,800 --> 00:02:50,580
‫つまり､ このエリア内に敵がいて､ そのターゲットもエリア内にいるとしたら､ このメッシュに沿った経路を見つけることができるのです｡

32
00:02:50,760 --> 00:02:55,200
‫では､ これを障害物のあるところに移動させるとどうなるか､ 見てみましょう｡

33
00:02:55,200 --> 00:03:00,060
‫この障害物のあたりでメッシュが切り取られているのがわかると思います｡

34
00:03:00,060 --> 00:03:07,680
‫実際にやりたいことは､ このボリュームをレベル全体に広げることです｡ そうしないことも､ 特定のセグメントだけにすることもできますが､

35
00:03:07,680 --> 00:03:15,780
‫最も簡単な方法は､ このボリュームの境界を広げることです｡

36
00:03:15,780 --> 00:03:20,310
‫右側の詳細ペインに移動すると､ ブラシ設定があり､ ブラシのサイズを変更できます｡

37
00:03:20,310 --> 00:03:28,770
‫このように､ ブラシを大きくしたり､ 広くしたりすることができ､ 再計算中は赤くなります｡

38
00:03:28,770 --> 00:03:33,300
‫ナビメッシュを構築しているのがわかると思いますが､ 大きくなればなるほど､ ナビメッシュを構築するのが難しくなり､

39
00:03:33,300 --> 00:03:35,640
‫時間がかかります｡

40
00:03:35,640 --> 00:03:37,590
‫しかし､ これが功を奏していることはおわかりいただけると思います｡

41
00:03:37,590 --> 00:03:39,210
‫廊下を切り取っているのです｡

42
00:03:39,210 --> 00:03:43,000
‫歩けないような障害物を切り取っているのです｡

43
00:03:43,020 --> 00:03:52,170
‫このパズルの第二の部分は､ 私たちの目がこのメッシュ上でルーティングのアルゴリズムを行えるようにすることです｡

44
00:03:52,200 --> 00:03:57,930
‫さて､ この中にあるものをお見せしたいので､ BPシューターアイコントロールを開いてみましょう｡

45
00:03:57,960 --> 00:04:02,370
‫ここで完全なブループリント・エディタを開いて､ ここを見てみます｡

46
00:04:02,370 --> 00:04:06,180
‫パスフォローコンポーネントと呼ばれる部品があります｡

47
00:04:06,360 --> 00:04:16,230
‫このコンポーネントは､ Fメッシュを見つける役割を担っており､ 基本的にはパスを作成し､ それに沿って自動的に移動できるようにするものです｡

48
00:04:16,230 --> 00:04:19,080
‫だから､ そのような機能を組み込む必要はないのです｡

49
00:04:19,080 --> 00:04:24,300
‫AIコントローラーに搭載されている機能を利用すればいいだけなんです｡

50
00:04:24,300 --> 00:04:35,490
‫AIコントローラーHでムーブの機能を探してきたら､ ムーブトゥをオープンブラケットでやってみよう｡

51
00:04:35,490 --> 00:04:37,200
‫それから､ ここにはいくつかのオプションがあります｡

52
00:04:37,200 --> 00:04:40,350
‫1テイク・ア・ムーブをリクエストしています｡

53
00:04:40,470 --> 00:04:45,510
‫ここにもいくつか選択肢があるのですが､ 実は別の名前で呼ばれています｡

54
00:04:45,510 --> 00:04:55,350
‫Unrealの後のバージョンでは､ アクターへの移動とロケーションへの移動があり､ これらは設定の焦点と同じように区別されています｡

55
00:04:55,350 --> 00:05:00,630
‫アクターのように動いているものにフォーカスを合わせることもできますし､ 例えばパトロールルートのウェイポイントなど､

56
00:05:00,630 --> 00:05:06,420
‫特定の目的地にフォーカスを合わせることも､ 場所への移動になるかもしれません｡

57
00:05:06,420 --> 00:05:10,680
‫そこで､ チャレンジャーとして「ムーブ」に挑戦してほしいのです｡

58
00:05:10,680 --> 00:05:17,850
‫そこで､ シーン内にナビメッシュを用意し､ 必要な分だけシーンを覆って､ 動き回れるようにします｡

59
00:05:17,910 --> 00:05:23,640
‫すべてのロケーションでフォローし､ そのムーブをアクションに移すか､ ロケーションに移すかを呼び出します｡

60
00:05:23,640 --> 00:05:29,300
‫どの宿でプレイを始めるかは､ AIに追いかけてもらうためにあなたが決めてください｡

61
00:05:29,310 --> 00:05:31,110
‫では､ ビデオを一時停止して､ やってみてください｡

62
00:05:32,330 --> 00:05:32,750
‫なるほど｡

63
00:05:32,750 --> 00:05:33,290
‫お帰りなさい｡

64
00:05:33,350 --> 00:05:34,470
‫これに挑戦してみよう｡

65
00:05:34,490 --> 00:05:35,870
‫では､ まず最初に｡

66
00:05:35,870 --> 00:05:44,660
‫これからI'm going to actorを使い､ ゴールとなるアクターを設定します｡

67
00:05:44,660 --> 00:05:51,920
‫そこで､ シューターIのコントローラCPに移動して､ 再生を開始し､

68
00:05:51,920 --> 00:05:57,590
‫アクタに移動することができます｡

69
00:05:57,590 --> 00:06:00,350
‫他に有用な特性はありますか？

70
00:06:00,350 --> 00:06:01,940
‫受け入れ態勢を整えた

71
00:06:01,940 --> 00:06:04,010
‫現時点では受け入れ半径がない｡

72
00:06:04,010 --> 00:06:06,140
‫基本的には可能な限り近づける｡

73
00:06:06,140 --> 00:06:08,870
‫ちょっと侵食しているかもしれませんね｡

74
00:06:08,870 --> 00:06:14,750
‫受入半径を2mにすると､ 2m以内に入ろうとするんです｡

75
00:06:15,110 --> 00:06:16,910
‫では､ さっそくそれを作ってみましょう｡

76
00:06:17,690 --> 00:06:20,600
‫そして､ それが完了したら､ エンジンの中に入ってください｡

77
00:06:20,600 --> 00:06:21,740
‫そして､ 見てみましょう｡

78
00:06:21,740 --> 00:06:29,690
‫ここでは､ そもそもなぜバウンス量が必要なのかを味わっていただくために､ バウンス量を拡大しないことにしています｡

79
00:06:29,690 --> 00:06:32,120
‫では､ まずオルトPから｡

80
00:06:32,780 --> 00:06:33,530
‫そして､ こうなった｡

81
00:06:33,530 --> 00:06:38,000
‫ナビメッシュの上で､ こいつが自動でこちらに移動してきた｡

82
00:06:38,000 --> 00:06:45,380
‫しかし､ そのナビメッシュから離れると､ ルートがわからなくなり､ それ以上近づけなくなるのです｡

83
00:06:45,380 --> 00:06:48,980
‫彼は私に近づく方法を見つけることができません｡

84
00:06:48,980 --> 00:06:55,100
‫というのも､ おそらく起きているのは､ 彼が私の受入範囲に入り､

85
00:06:55,100 --> 00:07:01,550
‫彼らが再チャレンジしないことなのです｡

86
00:07:01,550 --> 00:07:12,620
‫そのため､ この受入半径を削除して再コンパイルすれば､ それが原因かどうかを確認することができます｡

87
00:07:12,620 --> 00:07:16,340
‫そうそう､ 私が離れるとすぐ寄ってくるんですよ｡

88
00:07:16,340 --> 00:07:19,130
‫まあ､ 彼は基本的にそのコマンドを忘れているんですけどね｡

89
00:07:19,130 --> 00:07:26,720
‫そこで､ やりたいことはチックに行うことです｡ 基本的に彼は私に到達すると､ 私を追いかけることを諦めるからです｡

90
00:07:26,720 --> 00:07:28,940
‫では､ これをチックに移しましょう｡

91
00:07:28,940 --> 00:07:31,580
‫これは理想的な方法ではないですが､ そうするつもりです｡

92
00:07:31,580 --> 00:07:38,030
‫とりあえず､ 俳優HのTicのサインをコピーして､ 公開コーナーに入るのはわかったので､

93
00:07:38,030 --> 00:07:40,820
‫一番上に公開コーナーを作ります｡

94
00:07:42,770 --> 00:07:50,210
‫シグネチャをコピーしてオーバーライドし､

95
00:07:50,210 --> 00:08:01,370
‫安全性を確保してから､ C++で実装します｡

96
00:08:01,370 --> 00:08:09,230
‫では､ 屋根裏にいる最初のプレーヤーを捕まえるこのラインを､ 繰り返し確保することを確認しましょう｡

97
00:08:09,230 --> 00:08:14,180
‫そして､ 今度はちゃんとテストして､ 世界にアルトブタをやりましょう｡

98
00:08:14,180 --> 00:08:16,250
‫彼は2メートル以内に来て､ 私たちを捕まえる｡

99
00:08:16,250 --> 00:08:18,710
‫彼から離れると､ それを見てしまうんです｡

100
00:08:18,710 --> 00:08:24,470
‫今回はちゃんと狙ってないのに､ ついてこようとしてる｡

101
00:08:24,740 --> 00:08:29,630
‫しかし､ 私がナビメッシュから離れた途端､ 彼はもう私を見つける術を知らない｡

102
00:08:29,630 --> 00:08:31,190
‫では､ それを解決しましょうか｡

103
00:08:31,190 --> 00:08:35,450
‫ナビメッシュのバウンスボリュームに行きます｡

104
00:08:36,250 --> 00:08:37,390
‫選択できれば｡

105
00:08:37,390 --> 00:08:37,990
‫これでよしとしよう｡

106
00:08:37,990 --> 00:08:44,170
‫そして､ ここでズームアウトして､ レベル全体を見渡せるようにしたいのです｡

107
00:08:44,180 --> 00:08:52,990
‫このレベルは､ 外から見るとちょっとジャンキーに見えますが､ これはよくあることで､ 外側からではなく内側から見られるようにレベルを構築しているのです｡

108
00:08:52,990 --> 00:08:55,480
‫だから､ これをもっと広くしよう｡

109
00:08:55,480 --> 00:09:04,000
‫レベル全体をカバーするようにもっと背を高くして､ ここのレベルのすべての範囲をカバーするようにドラッグしてみましょう｡

110
00:09:04,000 --> 00:09:12,790
‫もう少し幅を広く､ 長さも少し長くして､ すべてを完全に包含するようにすればいい｡

111
00:09:13,150 --> 00:09:16,690
‫そして､ ナビメッシュを計算しているうちに緑が現れたのがわかると思います｡

112
00:09:16,690 --> 00:09:26,140
‫そして､ ナビメジャーが十分に低くなっていて､ 地図の最も低い範囲をカバーしていることを確認しましょう｡

113
00:09:26,140 --> 00:09:33,760
‫このまま進めば､ hide and nav meshの設定が完了し､ alt pで先に進んでプレイすれば､ このレベル内のどこに行っても私たちを見つけることができ､

114
00:09:33,760 --> 00:09:40,480
‫ついてくることができるのです｡

115
00:09:40,780 --> 00:09:47,830
‫私たちの信頼する忠実な下僕が､ どこへ行くにも私たちの後ろについてきているのがわかりますね｡

116
00:09:47,860 --> 00:09:51,040
‫ひたすら尾行してくるので､ 非常に迷惑しています｡

117
00:09:51,040 --> 00:09:53,830
‫しかし､ 彼はそれができるのです｡

118
00:09:54,590 --> 00:09:55,190
‫まあ､ いくつかあるんですけどね｡

119
00:09:55,190 --> 00:10:05,450
‫この講義では､ どのようにナビメジャーを作成し､ それを使ってどのように空気をレベルアップさせるかについて見てきました｡

120
00:10:06,490 --> 00:10:12,220
‫次の講義では､ このバグを修正し､ 視線をチェックして､ 必ずしも常にプレイヤーを追いかけ回さないようにするために､

121
00:10:12,220 --> 00:10:16,330
‫ループバックするつもりです｡

122
00:10:16,330 --> 00:10:17,050
‫そちらをご覧ください｡

123
00:10:18,390 --> 00:10:25,620
‫そして､ ここで1つだけ愚かな小さな間違いに気づきました｡ それは､ スーパーコロンチックに電話をしていないことです｡

124
00:10:25,620 --> 00:10:35,160
‫そのため､ 原因不明のバグが発生した場合､ superにコールしていないと､ 必ずしも期待通りに動作しないことがあるのです｡

125
00:10:35,160 --> 00:10:42,270
‫そのため､ フォーカスが効かなくなっていたのです｡ 本来は､ ハイコントローラーでチックを無効にしていたのですが､ それではダメなのです｡

126
00:10:42,330 --> 00:10:47,520
‫それを有効にすれば､ 設定したフォーカスですべてが通常通り動作するはずです｡

