﻿1
00:00:04,260 --> 00:00:05,280
‫こんにちは､ ようこそ｡

2
00:00:05,280 --> 00:00:14,250
‫この講義では､ ライントレースを設定して､ 壁を撮影して､ これらのデバッグポイントが表示されるのを確認できるようにします｡

3
00:00:14,250 --> 00:00:18,510
‫そして､ 新しい機能であるチャンネル別ライントレースを使って､

4
00:00:18,510 --> 00:00:22,470
‫この作業を行います｡

5
00:00:22,500 --> 00:00:24,330
‫さっそく潜入してみましょう｡

6
00:00:25,430 --> 00:00:32,870
‫ビルディングエスケープでは､ ライントレースを使っていましたが､ ここではこの機能､ オブジェクトタイプ別ライントレースを使っています｡

7
00:00:32,870 --> 00:00:36,350
‫そして､ これは私たちが使いたいものなのでしょうか？

8
00:00:36,440 --> 00:00:44,450
‫さて､ オブジェクトタイプによるライントレースと､ そのごく近い兄弟であるチャンネルによるライントレースとの違いは何でしょうか？

9
00:00:45,170 --> 00:00:53,540
‫オブジェクトタイプは､ この行を検索して､ このタイプに一致するオブジェクトがあるかどうかを確認したい､ と言っています｡

10
00:00:53,540 --> 00:01:01,700
‫そのため､ エスケープを構築する際に使用したのは､ 物理ボディ・オブジェクト・タイプのようなもので､ これは素晴らしい､

11
00:01:01,700 --> 00:01:04,250
‫物理ボディをヒットさせます｡

12
00:01:04,250 --> 00:01:10,580
‫でも､ 急に「他のものを打ってほしい」と思っても､ 選択肢はあまり残らない｡

13
00:01:10,580 --> 00:01:16,490
‫チャンネルは､ 独自のチャンネルを定義し､ どのようなオブジェクトがそのチャンネルを透過し､ どのようなオブジェクトがそれをブロックするかを定義できるため､

14
00:01:16,490 --> 00:01:22,100
‫その点では優れています｡

15
00:01:22,100 --> 00:01:29,420
‫というのも､ ブッシュは弾丸を防げないが､ 壁は弾丸を防げるが､ ダメージは受けない､

16
00:01:30,070 --> 00:01:38,000
‫しかし､ それは後で対処できる､ というようなことが可能になるからです｡

17
00:01:38,180 --> 00:01:45,200
‫つまりチャンネルはこれから行くルートであり､ ここで制御を行うことで正しい方法を見つけることができるのです｡

18
00:01:45,200 --> 00:01:50,990
‫P ところで､ 最近知ったのですが､ ACTシンボルを使うと､ このファイルや他のファイルの中のシンボルを検索できるのですが､

19
00:01:50,990 --> 00:02:00,170
‫ファイルを開いておくと､ もっと早く検索できますよ｡

20
00:02:00,350 --> 00:02:07,190
‫そして､ ライントレースのように､ 関数やクラス､ 変数などのすべてのシンボルのリストを表示し､

21
00:02:07,190 --> 00:02:15,920
‫ライン､ トレース､ テストライン､ トレース､ チャンネル､ オブジェクトタイプごとにシングルで検索することができます｡

22
00:02:15,920 --> 00:02:22,340
‫最初の1行トレース､ シングルBIチャンネル､ これはヒットしたものに対するアウトパラメータを持つことになります｡

23
00:02:22,430 --> 00:02:27,800
‫開始点､ 終了点､ コリジョントレースチャンネルについては後ほど説明します｡ また､ いくつかのクエリーパラメーターはデフォルトで設定されているので､

24
00:02:27,800 --> 00:02:33,290
‫実際に心配する必要はありません｡

25
00:02:33,290 --> 00:02:39,350
‫つまり､ 最初の数項目､ Outhit Start､ End､ Trace Channelが気になるところです｡

26
00:02:39,680 --> 00:02:41,750
‫Traceチャンネルを設定してみましょう｡

27
00:02:41,750 --> 00:02:45,320
‫これについては､ 設定とプロジェクトの設定に行くことになります｡

28
00:02:45,320 --> 00:02:48,950
‫そして､ エンジンの下には､ 衝突の危険性のある場所を探しています｡

29
00:02:48,950 --> 00:02:53,300
‫この下には､ オブジェクトチャンネルとトレースチャンネルがあるのがわかると思います｡

30
00:02:53,300 --> 00:02:57,590
‫オブジェクトチャンネルは､ 実はオブジェクトの種類を表す別の表現に過ぎません｡

31
00:02:57,590 --> 00:03:02,120
‫ですから､ ポーンなどのデフォルトのオブジェクトセットだけでなく､ 新しいカテゴリーのオブジェクトを用意したい場合は､

32
00:03:02,120 --> 00:03:06,140
‫オブジェクトチャンネルを利用することができます｡

33
00:03:06,140 --> 00:03:15,740
‫でも､ トレースを使えば､ 逆に､ 弾丸を持っていて､ どんなものに当たるのか､ ということを定義することができます｡

34
00:03:15,740 --> 00:03:21,860
‫そこで､ このルートで新しいトレースチャンネルを追加し､ このチャンネルをbulletと呼ぶことにします｡

35
00:03:22,600 --> 00:03:25,840
‫と既定路線のような対応になりそうです｡

36
00:03:25,840 --> 00:03:29,290
‫BLOCK つまり､ 基本的にすべてのオブジェクトタイプがそうなるということです｡

37
00:03:29,290 --> 00:03:36,820
‫BLOCK 特に指定がなければ､ このまま進めて､ プリセットを見ることができます｡

38
00:03:37,270 --> 00:03:42,490
‫これを展開すると､ プリセットには､ 適用できるさまざまなものがあることがわかります｡

39
00:03:42,490 --> 00:03:52,840
‫たとえば､ これを物理アクタにしたい場合､ オブジェクトの種類は､ 定義済みのオブジェクトチャンネルである物理ボディになるでしょう｡

40
00:03:52,840 --> 00:04:00,550
‫しかし､ これを拡大すると､ ここにあるさまざまな種類のトレースに対して､ どのような反応を示すかがわかります｡

41
00:04:00,550 --> 00:04:07,030
‫トレースタイプのカメラ､ 弾丸の可視性､ これらすべてをブロックし､ さらにオブジェクトタイプも持っています｡

42
00:04:07,030 --> 00:04:16,750
‫ポーンや乗り物など､ 他のオブジェクトと物理的にどのように相互作用するかということですね｡  それは､ オブジェクトによるライントレースとの相互作用ではありません｡

43
00:04:16,750 --> 00:04:19,390
‫それは若干わかりにくいし､ 以前も混乱したことがある｡

44
00:04:19,690 --> 00:04:28,990
‫トレースタイプは興味深いもので､ ここに目を通すと､ コリジョンしないように設定されていることがわかります｡

45
00:04:28,990 --> 00:04:31,900
‫だから､ 弾丸もそれとぶつからないようにしよう｡

46
00:04:31,900 --> 00:04:42,640
‫プリセットのいくつかをオーバーライドするだけで､ 弾丸が期待通りに動作するようになり､ たとえば､ オーバーラップオールは基本的に弾丸と重なるはずです｡

47
00:04:42,640 --> 00:04:50,710
‫そして､ おそらく見えない壁や見えない壁のダイナミックも､ 今回の弾丸の目的には無視されるべきでしょう｡

48
00:04:50,770 --> 00:04:51,940
‫こちらもダイナミックと同じです｡

49
00:04:51,940 --> 00:04:55,300
‫基本的には､ 視認性トレースに非常に似たものが出来上がることがおわかりいただけると思います｡

50
00:04:55,300 --> 00:05:00,850
‫しかし､ なぜ分けておくかというと､ 「この茂みは見通せないが､ この茂みを撃ち抜くことはできる」というように､

51
00:05:00,850 --> 00:05:04,660
‫ちょっとした区別をつけたい場合があるからです｡

52
00:05:04,660 --> 00:05:09,100
‫そういう意味でも､ 自分たちのトレースチャンネルがあるというのは､ 本当に便利です｡

53
00:05:09,100 --> 00:05:14,800
‫このトレースチャンネルをコードで使えるようにしたいのですが､ ちょっとおかしなことに､ ここには E collision

54
00:05:14,800 --> 00:05:21,490
‫channel という enum があって､ F12 キーを押してその定義を見ると､ 定義済みのもの､ world static - visibility

55
00:05:21,490 --> 00:05:27,580
‫などの束があるのがわかります｡ この下に､ さらにエンジントレースチャンネル1､

56
00:05:27,580 --> 00:05:35,050
‫2､ ゲームトレースチャンネル1､ 2､ 3などがあります｡

57
00:05:35,050 --> 00:05:35,050
‫が定義されています｡

58
00:05:35,500 --> 00:05:37,570
‫これはどれでしょう？

59
00:05:37,570 --> 00:05:39,970
‫ここに弾丸はないだろう？

60
00:05:40,300 --> 00:05:42,760
‫実際にこのゲームトレースチャンネルの1つを使うことになりました｡

61
00:05:42,760 --> 00:05:44,620
‫だから､ 本当にちょっとわかりにくいんです｡

62
00:05:44,620 --> 00:05:45,790
‫どっちなんだ？

63
00:05:45,880 --> 00:05:50,980
‫そのためには､ プロジェクトフォルダからconfigに移動します｡

64
00:05:51,130 --> 00:05:56,170
‫そして､ デフォルトのエンジンINIをテキストエディタで開きたいのです｡

65
00:05:56,170 --> 00:05:58,300
‫だから､ 好きな文章でやればいいんです｡

66
00:05:58,330 --> 00:06:03,310
‫Visual Studioのコードにドラッグして､ Visual Studioのコードがそれを開くようにするのが好きです｡

67
00:06:03,850 --> 00:06:10,960
‫そして､ この中で弾丸を探し､ それが何に割り当てられているかを確認したいのです｡

68
00:06:10,960 --> 00:06:17,680
‫そして､ この最初の行は､ このチャンネルがゲームのトレースチャンネル1であることを物語っていると思います｡

69
00:06:17,710 --> 00:06:18,430
‫ファンタスティック｡

70
00:06:18,430 --> 00:06:21,940
‫だから､ ライントレースをするときには､ それを使うことになるのです｡

71
00:06:22,180 --> 00:06:27,130
‫では､ このライントレースの構造を整えていきましょう｡

72
00:06:27,900 --> 00:06:30,540
‫まず必要なのは､ スタート地点です｡

73
00:06:30,540 --> 00:06:31,290
‫すでにあるんです｡

74
00:06:31,290 --> 00:06:33,050
‫これがビューポートの位置です｡

75
00:06:33,060 --> 00:06:37,890
‫また､ ライントレースの終点が必要ですが､ これは計算が少し難しいです｡

76
00:06:38,010 --> 00:06:45,930
‫そこで､ 終点のFベクトルを作成しましょう｡ 停止点を使って計算し､

77
00:06:46,380 --> 00:06:53,220
‫それに回転を掛けて､ 遠ざかりたい距離を計算します｡

78
00:06:53,400 --> 00:06:58,170
‫回転ではなく､ 回転の方向を指すベクトルというのは､ 少し分かりにくい感じがしますが､

79
00:06:58,170 --> 00:07:05,880
‫実は回転ベクトルを行うと､ この回転の方向を指すベクトルが得られます｡

80
00:07:05,880 --> 00:07:11,810
‫これは､ アニメーションの設計図でベクトルから回転を得るために行っていたことと､ 逆のことをしているようなものです｡

81
00:07:11,820 --> 00:07:13,140
‫これは逆も然り｡

82
00:07:13,200 --> 00:07:20,880
‫位置情報＋回転ベクトル､ そして､ 基本的に最大範囲にしたいわけです｡

83
00:07:20,880 --> 00:07:28,050
‫ここでは新しいプロパティを導入して､ どこでも編集できるようにし､ このようにMax Rangeというフロートにします｡

84
00:07:28,050 --> 00:07:33,990
‫そして､ デフォルトで10,000とか最大1000の範囲に設定すればいいんです｡

85
00:07:33,990 --> 00:07:37,050
‫100mくらい､ すみません､ 10mくらいになりますね｡

86
00:07:37,140 --> 00:07:42,870
‫そして､ 回転ベクトルに最大範囲を掛け合わせたものに移行するのです｡

87
00:07:42,870 --> 00:07:46,740
‫つまり､ この回転から得られるベクトルは､ サイズ1になるわけです｡

88
00:07:46,740 --> 00:07:51,030
‫これに最大範囲を掛けると､ 最大範囲が何であれ､ サイズの大きなベクトルになります｡

89
00:07:51,030 --> 00:07:54,780
‫そして､ それを位置情報の上に追加することで､ 終点を得ることができます｡

90
00:07:54,810 --> 00:07:57,810
‫その数学の100%に従わなくとも心配はない｡

91
00:07:58,110 --> 00:08:01,530
‫重要なのは､ こうやってエンドポイントにたどり着きたいということです｡

92
00:08:01,530 --> 00:08:06,510
‫そして､ ここにライントレースを追加するための To Do 行を追加します｡

93
00:08:06,510 --> 00:08:12,990
‫また､ 別の描画デバッグヘルパーを使用したいので､ この描画デバッグカメラを削除します｡

94
00:08:13,020 --> 00:08:16,950
‫ここにあるデバッグポイントを描きたいのです｡

95
00:08:16,950 --> 00:08:20,610
‫世界を取り込み､ 位置や大きさ､ 色を取り込む｡

96
00:08:20,610 --> 00:08:24,660
‫そして､ それがしつこいかどうかは別として､ 私たちはおそらく､ しつこく､ 目に見えるようにしたいと思うのです｡

97
00:08:24,660 --> 00:08:27,600
‫だから､ この路線でやっていけるはずです｡

98
00:08:27,600 --> 00:08:41,190
‫それでは､ デバッグポイントを描画して､ ここですぐに世界を取得することにします｡

99
00:08:41,190 --> 00:08:48,450
‫そして､ ビューポートの位置から始めます｡

100
00:08:48,450 --> 00:08:55,410
‫そして､ セミコロンを大文字にして､ エンジンの上でコンパイルを実行し､ 再生ボタンを押して､ これが機能しているかどうかを確認することになります｡

101
00:08:55,800 --> 00:08:59,640
‫そこで､ 撮影して少し後ろに下がると､ そこに点があるのがわかります｡

102
00:08:59,640 --> 00:09:02,400
‫しかし､ 本当に本当に小さくて見づらい｡

103
00:09:02,400 --> 00:09:07,050
‫だから､ 代わりにこれを20に増やそうというのです｡

104
00:09:07,140 --> 00:09:08,190
‫その方がいいのかどうか､ 見てみましょう｡

105
00:09:08,190 --> 00:09:09,510
‫コンパイルして再生する｡

106
00:09:09,540 --> 00:09:09,780
‫うん｡

107
00:09:09,780 --> 00:09:13,020
‫案の定､ 今はとてもとてもわかりやすい点が見えています｡

108
00:09:13,260 --> 00:09:16,860
‫では､ そろそろチャンネル別のライントレースにチャレンジしてみましょうか｡

109
00:09:16,860 --> 00:09:22,650
‫以前はオブジェクトタイプでやっていたので､ それを応用してチャンネルでやってみたいと思っています｡

110
00:09:22,650 --> 00:09:28,290
‫そこで､ すでに定義した場所と終わりを開始と終了として使用します｡

111
00:09:28,530 --> 00:09:31,650
‫if文を作成した結果の成功を確認する｡

112
00:09:31,650 --> 00:09:38,940
‫そのため､ outのパラメータだけ取得したり､ ヒット結果のパラメータを取得して､ デバッグポイントだけを描画します｡

113
00:09:38,940 --> 00:09:46,080
‫うまくポイントを押さえたら､ ドットINIファイルで見つけたチャンネルも使っていることを思い出してください｡

114
00:09:46,080 --> 00:09:51,060
‫そこで､ ビデオを一時停止して､ これらのパラメータと引数をすべてライントレースに整理して､

115
00:09:51,060 --> 00:09:56,160
‫ライントレースでヒットしたデバッグポイントを描画できるかどうかを確認してください｡

116
00:09:56,730 --> 00:10:02,400
‫さて､ この段階では､ プレイヤーアクターを無視するようなスマートなことはしていません｡

117
00:10:02,400 --> 00:10:08,160
‫そのため､ ライントレースがプレイヤーに当たってしまうことがありますが､ 今回のチャレンジでは問題ありません｡

118
00:10:08,190 --> 00:10:08,700
‫ビデオを一時停止する｡

119
00:10:08,700 --> 00:10:09,270
‫行ってみてください｡

120
00:10:10,700 --> 00:10:11,030
‫なるほど｡

121
00:10:11,030 --> 00:10:11,690
‫お帰りなさい｡

122
00:10:11,720 --> 00:10:13,910
‫では､ さっそく潜入してみましょう｡

123
00:10:13,910 --> 00:10:18,410
‫まずは世界を手に入れ､ そこに矢を放つことをやる｡

124
00:10:18,410 --> 00:10:23,210
‫これからチャンネルごとのライントレース単体で行っていきます｡

125
00:10:24,170 --> 00:10:25,910
‫それなら､ ヒットする結果が必要だ｡

126
00:10:25,910 --> 00:10:32,870
‫そこで､ パラメータとして､ まず､ ヒット結果構造体を宣言し､ outパラメータとして渡す必要があります｡

127
00:10:33,110 --> 00:10:37,820
‫これをhitと呼び､ 第1引数として渡します｡

128
00:10:37,850 --> 00:10:39,650
‫それから､ 場所が必要です｡

129
00:10:40,410 --> 00:10:42,000
‫そして､ 終わりも必要です｡

130
00:10:42,090 --> 00:10:43,490
‫それから？

131
00:10:43,500 --> 00:10:44,430
‫次に来るのは？

132
00:10:44,430 --> 00:10:47,470
‫EコリジョンEコリジョンチャンネル｡

133
00:10:47,490 --> 00:10:49,530
‫Eコリジョンチャンネルになるわけですね｡

134
00:10:49,530 --> 00:10:50,490
‫コロン

135
00:10:50,490 --> 00:10:53,610
‫そして､ e cとなるはずですが､ どうでしたっけ？

136
00:10:53,610 --> 00:10:55,440
‫それでは､ デフォルトのエンジンで見てみましょう｡

137
00:10:55,440 --> 00:11:01,400
‫Any e cc game trace channel oneは､ デフォルトのanyで設定されているものです｡

138
00:11:01,410 --> 00:11:03,360
‫ここに必要な議論はあるのか？

139
00:11:03,360 --> 00:11:04,770
‫一緒に行きましょう｡

140
00:11:04,800 --> 00:11:06,750
‫コリジョンパラメーターはデフォルトで用意されていますね｡

141
00:11:06,750 --> 00:11:10,050
‫だから､ ここには何もいらない｡

142
00:11:10,230 --> 00:11:14,160
‫そして､ このために必要なのは､ ブーリアン演算の結果です｡

143
00:11:14,160 --> 00:11:16,110
‫だからB成功｡

144
00:11:16,910 --> 00:11:19,020
‫そして､ とても参考になりそうです｡

145
00:11:19,020 --> 00:11:20,450
‫成功ではないのですか？

146
00:11:20,810 --> 00:11:23,360
‫仮にifが成功するとしよう｡

147
00:11:24,230 --> 00:11:26,720
‫そのデバッグポイントを描きたいのです｡

148
00:11:26,720 --> 00:11:27,950
‫そこで､ これを下に移動させます｡

149
00:11:27,950 --> 00:11:35,300
‫Altキーを押しながら､ 矢印でこのように線を移動させ､ コントロールキーとキーボードの右角括弧でインデントすると､

150
00:11:35,300 --> 00:11:41,390
‫このような形になります｡

151
00:11:41,390 --> 00:11:46,550
‫そして今度は､ 開始点である位置の代わりに､ 実際にヒットした位置が欲しいのです｡

152
00:11:46,550 --> 00:11:50,270
‫だから､ それはそうやってドットロケーションを打つことになる｡

153
00:11:50,270 --> 00:11:54,650
‫そして､ この行の最後にセミコロンが抜けているように見えます｡

154
00:11:54,650 --> 00:11:56,750
‫それを作ってやってみよう｡

155
00:11:57,020 --> 00:12:02,750
‫それができたら､ 再生ボタンを押して､ 世界に出て､ 壁に向かって撃ってみよう｡

156
00:12:02,960 --> 00:12:03,650
‫これでよしとする｡

157
00:12:03,650 --> 00:12:07,490
‫ちょうど私が撮影した位置で､ 壁にポイントが表示されているのがわかると思います｡

158
00:12:07,490 --> 00:12:09,020
‫何度でもできる｡

159
00:12:09,140 --> 00:12:16,730
‫壁から遠く離れると当たるようです､ うちの最大射程がかなり短いので全く当たりません｡

160
00:12:16,730 --> 00:12:21,230
‫そして､ 最大範囲内に入ると､ ヒットし､ ポイントが描画されるのがわかると思います｡

161
00:12:21,230 --> 00:12:23,930
‫ということで､ 無事チャレンジ完了です｡

162
00:12:23,930 --> 00:12:29,270
‫特定のポイントへの表示とライントレースができるようになりました｡

163
00:12:29,270 --> 00:12:38,630
‫次のステップでは､ パーティクル効果を実際に表示させる予定です｡ これは､ 単にデバッグポイントを描くよりもずっとクールなものになるでしょう｡

164
00:12:38,630 --> 00:12:40,160
‫それでは､ 次回の講義でお会いしましょう｡

