﻿1
00:00:04,170 --> 00:00:04,650
‫ねえ｡

2
00:00:04,650 --> 00:00:05,580
‫お帰りなさい｡

3
00:00:05,610 --> 00:00:09,390
‫これで､ カーソルの下にヒットした結果を取得する必要があることがわかった｡

4
00:00:09,420 --> 00:00:14,070
‫このビデオでは､ その仕組みと意味についてもう少し詳しくお話しします｡

5
00:00:14,250 --> 00:00:22,090
‫そこで､ ヒット結果をカーソルの下に表示し､ この場所を表示することが目的ですが､ そのためにはデバッグ用の球を描けばいいのです｡

6
00:00:22,110 --> 00:00:24,150
‫その方法も学んでいきます｡

7
00:00:24,180 --> 00:00:27,300
‫そこで､ ヒット・リザルトと呼ばれるものについて説明します｡

8
00:00:27,600 --> 00:00:30,550
‫ゲームでは､ こんなことをしたくなることが多いでしょう｡

9
00:00:30,570 --> 00:00:32,520
‫宇宙に一点突破

10
00:00:32,550 --> 00:00:39,210
‫この点をstartと呼び､ 型はF vector､ 終了位置はendとする｡

11
00:00:39,240 --> 00:00:43,260
‫これもFベクトル型の空間上の点となる｡

12
00:00:43,410 --> 00:00:48,720
‫では､ 始点から終点まで見えない線を引きたいとします｡

13
00:00:48,750 --> 00:00:55,800
‫そして､ この線を引いた瞬間に､ 始点と終点の間に何かオブジェクトがあるかどうかを確認したいのです｡

14
00:00:56,280 --> 00:01:01,470
‫さて､ もしあれば､ 空間に描いているこの線は､ そのオブジェクトにぶつかることになります｡

15
00:01:01,470 --> 00:01:05,400
‫表面上､ このようなことが起こると､ 私たちはこれをヒットイベントと呼んでいます｡

16
00:01:05,430 --> 00:01:10,820
‫さて､ このように見えない線を描くことを､ ライントレースを行うということです｡

17
00:01:10,830 --> 00:01:14,520
‫そして､ 何かにぶつかると､ トレースヒットと言うのです｡

18
00:01:14,550 --> 00:01:22,820
‫さて､ 実際に何かを叩いてヒットイベントが発生した場合､ トレースヒットはヒット結果と呼ばれる構造体に情報を格納します｡

19
00:01:22,830 --> 00:01:24,700
‫タイプはFヒット結果です｡

20
00:01:24,720 --> 00:01:31,560
‫さて､ F hit results structには､ ヒットしたイベントの情報を格納する変数があり､

21
00:01:31,560 --> 00:01:38,680
‫空間のfベクトルとしてのヒット位置や､ ヒットしたアクターなどの情報が格納されています｡

22
00:01:38,700 --> 00:01:44,100
‫さて､ ライントレースを行う際には､ コリジョンチャンネルを指定して行います｡

23
00:01:44,130 --> 00:01:48,390
‫通常､ ライントレースでは､ 可視性というチャンネルを選択します｡

24
00:01:48,510 --> 00:01:57,030
‫E Collision Channelというenumが存在し､ このenumの中にXY visibilityというenum定数が存在します｡

25
00:01:57,180 --> 00:02:01,470
‫ライントレースを行う際に指定するパラメータの一つです｡

26
00:02:01,740 --> 00:02:07,380
‫さて､ 可視チャンネルを指定すると､ コリジョン設定で可視チャンネルをブロックするように設定されているオブジェクトは､

27
00:02:07,380 --> 00:02:10,980
‫ヒットイベントを登録することになります｡

28
00:02:11,130 --> 00:02:16,350
‫可視チャネルをブロックするように設定されていないオブジェクトは､ ヒットイベントを発生させません｡

29
00:02:16,380 --> 00:02:19,350
‫今度は､ カーソルの下にトレース結果を表示させたい｡

30
00:02:19,590 --> 00:02:23,040
‫ここにスクリーンがあり､ ここにカーソルがあると想像してください｡

31
00:02:23,040 --> 00:02:29,730
‫カーソルの先端には､ カーソルの下にヒットした結果を得るための関数を使用したときの画面上のポイントがあるのです｡

32
00:02:29,760 --> 00:02:35,040
‫カメラには､ この床のようなものが映ります｡

33
00:02:35,040 --> 00:02:45,090
‫そして､ カーソルの位置に対応する画面上のポイントでカメラからライントレースを行い､ そのライントレースをまっすぐ世界へ向けて撮影しているのです｡

34
00:02:45,090 --> 00:02:51,570
‫また､ 何かにぶつかったら､ ヒットイベントを生成して､ その情報をヒット結果構造体に格納します｡

35
00:02:52,080 --> 00:02:54,470
‫では､ どうすればいいのか､ 考えてみましょう｡

36
00:02:54,480 --> 00:03:03,240
‫戦車CPに来て､ やりたいことは毎フレームカーソルの下にヒット結果を取得すること､ つまりtick関数が必要なんです｡

37
00:03:03,240 --> 00:03:08,160
‫そこで､ もう一度､ ベースアポンに戻り､ ここでティック関数を見つけることにします｡

38
00:03:08,190 --> 00:03:15,570
‫さて､ この関数はベースポーンでは何も使っていないので､ Begin Playと同じようにタンククラスに移動させることができます｡

39
00:03:15,570 --> 00:03:21,600
‫そこで､ 関数宣言とそのコメントをハイライトしてコピーしてみることにする｡

40
00:03:21,600 --> 00:03:33,150
‫そして､ このセクションをpublicも含めて全部削除してから､ Tank Hに戻って､ ここのpublicセクションにtick関数の宣言を貼り付けようと思います｡

41
00:03:33,150 --> 00:03:37,620
‫さて､ ベースポーンでは使わないので､ ベースポーンからtick関数を削除します｡

42
00:03:37,680 --> 00:03:40,710
‫CP 今はベースポーンから消えている｡

43
00:03:41,340 --> 00:03:47,880
‫さて､ ここでインテントを宣言しましたが､ タンクで関数も定義する必要があります｡

44
00:03:48,060 --> 00:03:54,180
‫CP ここは戦車DHCPで､ setup player input componentのすぐ下にあります｡

45
00:03:54,180 --> 00:03:56,400
‫だから､ ボイドティックと言うことになる｡

46
00:03:57,340 --> 00:03:59,620
‫デルタタイムと呼ばれるフロートを取ります｡

47
00:04:00,940 --> 00:04:02,350
‫そして､ 私たちの体です｡

48
00:04:02,380 --> 00:04:09,180
‫さて､ ここでもtick関数の直前に､ スコープ解決演算子と一緒にtankが必要です｡

49
00:04:09,190 --> 00:04:14,530
‫そして､ スーパーティックも呼び出して､ デルタタイムを渡す必要があります｡

50
00:04:16,450 --> 00:04:19,240
‫ということで､ タンククラスのティックができました｡

51
00:04:19,450 --> 00:04:23,560
‫やりたいことは､ ヒットした結果をカーソルの下に表示させることです｡

52
00:04:23,710 --> 00:04:25,450
‫そこで､ その方法を紹介します｡

53
00:04:25,480 --> 00:04:31,260
‫今回使用する関数は､ プレイヤーコントローラ上に存在する「get hit result under cursor」という関数です｡

54
00:04:31,270 --> 00:04:32,800
‫という話をしたことがあります｡

55
00:04:32,980 --> 00:04:34,530
‫さて､ ここからが構文です｡

56
00:04:34,540 --> 00:04:36,160
‫トレースチャンネルがかかる｡

57
00:04:36,190 --> 00:04:40,660
‫トレースチャンネルを指定する必要があり､ visibilityを使用することを忘れないでください｡

58
00:04:40,840 --> 00:04:43,690
‫これで､ 2つの入力パラメータが追加されました｡

59
00:04:43,720 --> 00:04:46,720
‫1つ目は､ Bトレースコンプレックスと呼ばれるboolです｡

60
00:04:46,750 --> 00:04:49,120
‫それが何を意味するのかについては､ 後ほどお話しします｡

61
00:04:49,210 --> 00:04:52,270
‫そして､ 3つ目の入力パラメータはFヒット結果である｡

62
00:04:52,390 --> 00:04:57,820
‫ここで､ このタイプをドキュメントで確認するために､ F hit resultをクリックしてみます｡

63
00:04:58,480 --> 00:05:01,960
‫そして､ 下にスクロールすると､ 変数の一部が見えてきます｡

64
00:05:01,990 --> 00:05:06,670
‫そのうちの1つはアクターと呼ばれるもので､ 説明には「Actor Hit by the Trace」と書かれています｡

65
00:05:06,700 --> 00:05:13,510
‫また､ このBブロッキングヒットというのは､ このヒットがブロッキングによる衝突の結果かどうかを示しています｡

66
00:05:13,750 --> 00:05:17,770
‫さて､ その他の変数のうち､ インパクトポイントというものがあります｡

67
00:05:18,010 --> 00:05:22,000
‫これは､ 宇宙空間で実際に何かにぶつかったときの位置です｡

68
00:05:22,600 --> 00:05:26,150
‫では､ さっそくこの関数を呼び出してみましょう｡

69
00:05:26,170 --> 00:05:32,170
‫私達は最初に私達のプレーヤー､ コントローラーを望み､ 私達がここにしたおよび演劇を始めることのおかげで､ 私達はプレーヤー､ コントローラー､

70
00:05:32,170 --> 00:05:33,370
‫refを持っている｡

71
00:05:33,400 --> 00:05:38,770
‫さて､ 最初にやるべきことは､ プレイヤー・コントローラーの参照番号が有効かどうかを確認することです｡

72
00:05:39,100 --> 00:05:42,140
‫if文の中にポインタを渡すことはいつでもできる｡

73
00:05:42,160 --> 00:05:47,270
‫ポインタ自体がヌルポインタでない場合は真を返します｡

74
00:05:47,290 --> 00:05:53,920
‫もし､ NULLポインターであれば､ if文の中でfalseを返してしまい､ if文の中まで到達することはできない｡

75
00:05:54,070 --> 00:05:59,740
‫ポインタを使用する前に､ ポインタがNULLでないことを確認することは､ 常に良いアイデアです｡

76
00:06:00,010 --> 00:06:04,960
‫プレーヤーとコントローラーの参照を取得し､ 矢印演算子を使って関数を呼び出し､

77
00:06:04,960 --> 00:06:08,950
‫カーソルの下にヒット結果を取得します｡

78
00:06:09,100 --> 00:06:12,670
‫これで､ 3つの入力パラメータがあることがポップアップで確認できるようになりました｡

79
00:06:12,850 --> 00:06:14,650
‫1つ目は､ 「トレースチャンネル」です｡

80
00:06:14,950 --> 00:06:26,350
‫EA Collision Channelを使用し､ コロン2つをタイプすると､ EA Collision Channel列挙型の異なる列挙型定数をすべて表示するドロップダウンが表示されるのです｡

81
00:06:26,530 --> 00:06:35,230
‫可視性を使用したいので､ XY visibilityと入力して､ 可視性チャンネルを使用することを指定します｡

82
00:06:35,440 --> 00:06:41,470
‫次のパラメータはBトレースコンプレックスと呼ばれるもので､ これにfalseを渡すことにします｡

83
00:06:41,500 --> 00:06:44,590
‫さて､ これが何を意味するのかについては､ 後ほど説明します｡

84
00:06:44,590 --> 00:06:46,900
‫しかし､ 今はfalseを使うことにします｡

85
00:06:47,110 --> 00:06:50,300
‫さて､ 3つ目のパラメータは､ ヒットした結果が必要です｡

86
00:06:50,320 --> 00:06:53,140
‫これはタイプ F のヒット結果の構造体である｡

87
00:06:53,170 --> 00:06:59,500
‫さて､ この上にカーソルを置くと､ Fのヒット結果が参照として渡されていることがわかります｡ これは､

88
00:06:59,500 --> 00:07:02,740
‫アンパサンドのような参照演算子で示されています｡

89
00:07:02,890 --> 00:07:09,730
‫さて､ 通常､ 何かを参照として渡すとき､ それはコスト参照であり､ つまり､ 関数はそれを変更することができません｡

90
00:07:09,730 --> 00:07:13,870
‫しかし､ ここでは､ Fヒットの結果をnon constリファレンスとして渡している｡

91
00:07:14,110 --> 00:07:20,120
‫これは一般に､ その関数がこの入力パラメータを直接変更するように設計されていることを示唆するものである｡

92
00:07:20,140 --> 00:07:29,260
‫カーソルの下のヒット結果を取得するのは､ ヒット結果内のこれらの変数に､ ヒット結果に関する情報を記入することです｡

93
00:07:29,290 --> 00:07:32,710
‫つまり､ このfヒットの結果を1つだけ渡す必要があるのです｡

94
00:07:32,740 --> 00:07:37,540
‫ここでは､ F hit resultという型のifチェックでローカル変数を作成することにします｡

95
00:07:38,380 --> 00:07:44,650
‫そして､ このヒット結果を呼び出すと､ 3番目の入力パラメータとしてこのNを渡すだけでよいのです｡

96
00:07:44,830 --> 00:07:51,180
‫さて､ この関数を呼び出した後､ このヒット結果には､ このライントレースに関するデータが記入されることになります｡

97
00:07:51,190 --> 00:08:03,430
‫例えば､ ヒット結果のドットアクターにアクセスしてヒットしたアクターを取得したり､ ドットインパクトポイントにアクセスしてヒットイベントが発生した空間上のポイントを取得したりすることができます｡

98
00:08:03,580 --> 00:08:08,470
‫そこで､ ライントレースの情報を得るために利用するのが､ ヒット結果である｡

99
00:08:08,860 --> 00:08:13,450
‫今はよく､ ライントレースの結果を見ることができるのがうれしいですね｡

100
00:08:13,450 --> 00:08:18,010
‫デバッグ球を描くことで､ ライントレースの結果を簡単に視覚化することができます｡

101
00:08:18,340 --> 00:08:26,380
‫デバッグ球は空間に描くシンプルな図形で､ 位置を示すのに適しており､ デバッグの際にはこれを使用します｡

102
00:08:26,380 --> 00:08:29,380
‫実際にシフトゲームでデバッグスフィアを使うことはないんですよ｡

103
00:08:29,410 --> 00:08:32,150
‫では､ このデバッグ用の球体をどのように描画するか見てみましょう｡

104
00:08:32,170 --> 00:08:36,430
‫さて､ ここにdraw debug sphereという関数のドキュメントがあります｡

105
00:08:36,430 --> 00:08:38,800
‫ドローデバッグヘルパーに存在する｡

106
00:08:39,850 --> 00:08:45,160
‫このヘッダーをコピーして､ ドローデバッグスフィアを呼び出したい場所にインクルードすればいいわけです｡

107
00:08:45,190 --> 00:08:47,220
‫ここで､ すべての入力パラメータを見てみましょう｡

108
00:08:47,230 --> 00:08:52,240
‫まず､ どの世界に球体を描けばいいのかがわかるように､ 世界を取り込む｡

109
00:08:52,270 --> 00:08:57,100
‫球の中心を表すFベクトルと､ 半径を表すfloatを受け取ります｡

110
00:08:57,130 --> 00:09:00,800
‫その球の分割数をN 32とする｡

111
00:09:00,820 --> 00:09:04,810
‫セグメント数が多いほど､ 丸い球体でF色をとります｡

112
00:09:04,840 --> 00:09:08,350
‫こうすることで､ この球体をどの色で描画すればよいかがわかるのです｡

113
00:09:08,380 --> 00:09:11,080
‫持続的な回線が必要かどうかを知りたがっているのです｡

114
00:09:11,080 --> 00:09:15,220
‫つまり､ 線はすぐに消えるべきなのか､ それとも持続させるべきなのか｡

115
00:09:15,220 --> 00:09:18,760
‫もし､ それが持続するのであれば､ 球の寿命を知りたいと思う｡

116
00:09:18,760 --> 00:09:20,910
‫球体の描画を停止するタイミングは？

117
00:09:20,920 --> 00:09:27,880
‫もし､ 永続的な線を描かない､ 例えば1フレームだけ描きたいのであれば､ ライフタイムとしてマイナスのものを渡すことになります｡

118
00:09:27,910 --> 00:09:35,110
‫さて､ 最後の2つのパラメータはオプションなので､ 最初の7つのパラメータだけを取り上げて簡単に説明します｡

119
00:09:35,110 --> 00:09:36,520
‫その様子をご覧ください｡

120
00:09:36,730 --> 00:09:42,100
‫デバッグ用の球体を描画します｡

121
00:09:42,850 --> 00:09:46,630
‫そこで､ このドローデバッグ球関数が宣言されているのです｡

122
00:09:46,660 --> 00:09:52,900
‫では､ プレイを開始して､ デバッグ用の球体を描いて､ その動きを見てみましょう｡

123
00:09:52,900 --> 00:09:58,030
‫そこで､ ドローデバッグ球を呼び出し､ その

124
00:09:58,110 --> 00:10:00,780
‫最初の入力パラメータは新しい世界です｡

125
00:10:01,110 --> 00:10:10,500
‫Get Worldを呼び出すことで､ いつでも自分の世界を得ることができます｡ Get Worldは､ 現在の世界に対する新しい世界ポインタを返します｡

126
00:10:10,500 --> 00:10:12,930
‫これで最初の入力を満たすことになるわけです｡

127
00:10:13,260 --> 00:10:16,420
‫次に､ 球の中心を表すfベクトルが必要である｡

128
00:10:16,440 --> 00:10:24,130
‫今､ これを呼び出して再生を開始しているので､ 単純にget actor locationを呼び出すと､ 水槽の池の位置が取得できます｡

129
00:10:24,150 --> 00:10:26,400
‫戦車クラスなので｡

130
00:10:26,640 --> 00:10:29,250
‫今度は球体を少し上にあげます｡

131
00:10:29,250 --> 00:10:41,380
‫そこで､ Fベクトルを追加して､ Xは0ドットF､ Yは0ドットF､ Zは200Fとします｡

132
00:10:41,400 --> 00:10:45,120
‫では､ これらの入力パラメータをそれぞれ独立した行に配置してみます｡

133
00:10:45,120 --> 00:10:48,300
‫だから､ 各入力に対して何を渡しているのかが明確なのです｡

134
00:10:48,330 --> 00:10:57,230
‫2番目の入力は､ アクターの位置と､ 長さ200の上向きのベクトルを加えたこの式を取得しています｡

135
00:10:57,240 --> 00:11:04,950
‫この2つのベクトルを足すと､ Z軸方向に200単位分上がった戦車の位置が分かります｡

136
00:11:04,980 --> 00:11:09,600
‫次の入力パラメータは､ 球体の半径です｡

137
00:11:09,870 --> 00:11:16,970
‫半径100のデバッグ球がどのようなものかを見るために､ 100Fを選択することにします｡

138
00:11:16,980 --> 00:11:18,900
‫次にセグメント数です｡

139
00:11:18,990 --> 00:11:20,470
‫私は12を選びます｡

140
00:11:20,490 --> 00:11:22,130
‫それがどのようなものであるかは､ これからです｡

141
00:11:22,140 --> 00:11:29,640
‫さて､ Fカラーですが､ Fカラークラスというのがあって､ 赤などたくさんの色が組み込まれています｡

142
00:11:29,850 --> 00:11:34,410
‫では､ B persistent linesというブーリアンには､ trueを選んでおきます｡

143
00:11:34,410 --> 00:11:38,280
‫そして､ 次の入力パラメーターには､ ライフタイムノーティスがあります｡

144
00:11:38,280 --> 00:11:40,850
‫初期値はマイナス1です｡

145
00:11:40,860 --> 00:11:44,610
‫つまり､ デフォルトでは1フレームだけデバッグ球を描画します｡

146
00:11:44,610 --> 00:11:52,770
‫しかし､ 30秒間の球を得るために30Fを渡すので､ 最後の2つのパラメータは省略できる｡

147
00:11:52,770 --> 00:11:55,670
‫では､ デバッグ球を描画するための関数コールを以下に示します｡

148
00:11:55,680 --> 00:11:58,260
‫これをコンパイルして見てみましょう｡

149
00:11:58,710 --> 00:12:00,210
‫さて､ そんなわけで編集部に戻ってきました｡

150
00:12:00,210 --> 00:12:03,750
‫2つ目のウィンドウを開いて､ フルスクリーンで見ることができるようにします｡

151
00:12:03,750 --> 00:12:10,650
‫ウィンドウビューポートでビューポート2を選択すると､ この2つ目のウィンドウが表示されるようになりました｡

152
00:12:10,680 --> 00:12:15,300
‫開いたときにフルスクリーンでない場合もありますが､ いつでも最大化することができます｡

153
00:12:15,330 --> 00:12:18,570
‫ここから先はalt pでゲームをプレイすることができます｡

154
00:12:18,600 --> 00:12:19,770
‫では､ これをご覧ください｡

155
00:12:19,770 --> 00:12:21,300
‫これがデバッグスフィアです｡

156
00:12:21,330 --> 00:12:23,610
‫完全な円形ではないことに注意してください｡

157
00:12:23,610 --> 00:12:26,570
‫セグメント数は12を選びました｡

158
00:12:26,580 --> 00:12:30,960
‫セグメントを多く選択すると､ 球体を描くのに必要な線が多くなります｡

159
00:12:30,990 --> 00:12:34,380
‫さて､ これは半径が100の球体です｡

160
00:12:34,380 --> 00:12:40,740
‫かなり大きく､ 球の中心は戦車の位置で､ さらに上空に200台｡

161
00:12:40,740 --> 00:12:43,950
‫つまり､ このようにデバッグ用の球体を描画することができるのです｡

162
00:12:44,130 --> 00:12:49,890
‫そこで､ カーソルの下にあるトレース結果を利用して､ デバッグ用の球体を描くことが課題です｡

163
00:12:49,890 --> 00:12:55,680
‫そこで､ 新しい if 文でデバッグ用の球を描き､ player controller ref が null でないことをチェックします｡

164
00:12:55,710 --> 00:13:03,240
‫次に､ ヒットした結果からインパクトポイントを取得し､ それを球体の中心とします｡

165
00:13:03,390 --> 00:13:09,510
‫ここで､ persistent linesの入力パラメータにはfalseを､ durationには負の値を使用します｡

166
00:13:09,510 --> 00:13:14,250
‫そして､ これは1フレーム分の球体の描画になります｡ これは､ tic関数内で毎フレームこれを呼び出しているので､

167
00:13:14,250 --> 00:13:16,530
‫問題ありません｡

168
00:13:16,530 --> 00:13:20,490
‫そこで､ 動画を一時停止し､ tick関数でデバッグ球を描画します｡

169
00:13:23,240 --> 00:13:23,570
‫なるほど｡

170
00:13:23,570 --> 00:13:24,920
‫だから､ 私はここタンクに帰ってきたのです｡

171
00:13:26,180 --> 00:13:32,480
‫このdraw debug sphere関数の呼び出しをbegin playにコピーして､

172
00:13:32,480 --> 00:13:38,450
‫begin playから削除して､ if文の中のtickに戻り､ ここにペーストして､

173
00:13:38,450 --> 00:13:42,380
‫入力パラメータをいくつか変更します｡

174
00:13:42,380 --> 00:13:46,490
‫ひとつは､ 球体の中心の位置を変えていることです｡

175
00:13:46,490 --> 00:13:47,960
‫ヒットした結果を利用するのです｡

176
00:13:47,960 --> 00:13:51,200
‫だから､ ヒット・リザルト・ドット・インパクト・ポイントと言うことになるんです｡

177
00:13:51,440 --> 00:13:54,440
‫さて､ 半径ですが､ これはもう少し小さくしたいですね｡

178
00:13:54,440 --> 00:13:56,510
‫25くらいにしよう｡

179
00:13:56,810 --> 00:13:57,320
‫それでいいんです｡

180
00:13:57,320 --> 00:13:59,360
‫そうでなかったら､ こうしているだけです｡

181
00:13:59,360 --> 00:14:01,280
‫だから､ 球体はそれほど大きくないんです｡

182
00:14:01,280 --> 00:14:06,230
‫さて､ 最後から2番目のパラメータは､ パーシステントラインのために渡すものです｡

183
00:14:06,230 --> 00:14:13,190
‫falseで通して､ 持続時間は30秒ではなく､ マイナス1ポイントのFを使うつもりです｡

184
00:14:13,190 --> 00:14:18,920
‫この方法では､ 1フレーム分の球体を得ることができます｡ 繰り返しますが､ tick関数の中でこれを呼び出しているので､ 毎フレームこれを呼び出すことになりますが､

185
00:14:18,920 --> 00:14:21,560
‫これは大丈夫です｡

186
00:14:21,560 --> 00:14:23,300
‫では､ これをコンパイルしてみましょう｡

187
00:14:23,750 --> 00:14:25,130
‫さて､ エディタに戻ると｡

188
00:14:25,130 --> 00:14:28,010
‫今､ 再生ボタンを押したら､ これを見てください｡

189
00:14:28,040 --> 00:14:34,280
‫デバッグ球があるのですが､ カーソル下のライントレースのインパクトポイントに描画されています｡

190
00:14:34,280 --> 00:14:44,810
‫次に､ これを壁の上や他のオブジェクトに移動させると､ トレースはこれらのオブジェクトに当たります｡ なぜなら､ これらのオブジェクトは可視性チャンネルをブロックするように設定されているからです｡

191
00:14:44,840 --> 00:14:46,460
‫今､ かなりすごい｡

192
00:14:46,460 --> 00:14:50,630
‫複雑なトレースと単純なトレースについて説明すると約束しました｡

193
00:14:50,660 --> 00:14:53,510
‫ゲームをしながら､ あるものを見せます｡

194
00:14:53,510 --> 00:14:57,770
‫手のひらをコントロールできるように､ ビューポートでクリックしてみましょう｡

195
00:14:57,770 --> 00:15:02,360
‫ここでチルダキーを押しながら､ コンソールコマンドのshow collisionを入力します｡

196
00:15:02,360 --> 00:15:07,610
‫今､ 私の画面ではわかりにくいかもしれませんが､ あなたの画面では確実に見ることができます｡

197
00:15:07,610 --> 00:15:10,880
‫ポーンの衝突に注目してください｡

198
00:15:10,910 --> 00:15:18,020
‫カプセルだけでなく､ 戦車と砲塔のメッシュの周りにあるこの衝突ボリュームも見ることができます｡

199
00:15:18,020 --> 00:15:20,000
‫これは単純な衝突です｡

200
00:15:20,090 --> 00:15:24,050
‫単純なコリジョンを見ることができる場所を簡単に紹介しましょう｡

201
00:15:24,080 --> 00:15:32,690
‫アセットとメッシュに入り､ 例えばここでタンクベースをダブルクリックすると､ 複雑なコリジョンが表示されますね｡

202
00:15:32,690 --> 00:15:39,500
‫この上部の表示アイコンをクリックして､ 複雑な衝突を選択すると､ 複雑な衝突に含まれるすべてのポリゴンが表示され､

203
00:15:39,500 --> 00:15:42,410
‫たくさんのポリゴンが表示されます｡

204
00:15:42,440 --> 00:15:51,020
‫もう一度表示アイコンをクリックし､ 今度はSimple Collisionの隣にあるチェックボックスをチェックすると､ 別のコリジョンボリュームがあることに気づきます｡

205
00:15:51,020 --> 00:15:56,780
‫これはコリジョンハルと呼ばれ､ ジオメトリが非常に少なくなっています｡

206
00:15:56,780 --> 00:16:00,950
‫このコリジョンボリュームを持つポリゴンの数は少なくなります｡

207
00:16:00,950 --> 00:16:06,230
‫これは､ 物理エンジンがヒットイベントの重なりを検出するために使用するものです｡

208
00:16:06,230 --> 00:16:11,360
‫もし､ 複雑な衝突を利用するのであれば､ もっと膨大な計算が必要になります｡

209
00:16:11,360 --> 00:16:17,780
‫そのため､ 単純なコリジョンボリュームを用意して､ 複雑なコリジョンではなく単純なコリジョンでトレースしたほうが､

210
00:16:17,780 --> 00:16:23,270
‫ライントレース時のパフォーマンスが向上します｡

211
00:16:23,870 --> 00:16:27,200
‫これで､ カーソルの下にヒットした結果が出たわけです｡

212
00:16:27,290 --> 00:16:33,650
‫そこに至るまでには多少の苦労がありましたが､ 今では手に入れ､ この場所をデバッグ球で表示することで証明しています｡

213
00:16:33,650 --> 00:16:36,800
‫これは､ トレースヒットが機能していることを確認するための良い方法です｡

214
00:16:36,800 --> 00:16:42,650
‫さて､ これで動作が確認できたので､ その場所を使って戦車の砲塔を回転させます｡

215
00:16:42,980 --> 00:16:45,260
‫そして､ それは次のビデオで行います｡

216
00:16:45,440 --> 00:16:46,520
‫また､ お会いしましょう｡

