﻿1
00:00:04,610 --> 00:00:05,660
‫こんにちは､ ようこそ｡

2
00:00:05,660 --> 00:00:12,290
‫この講義では､ C++で新しいコンポーネント､ このトリガーボックスを作成します｡ このトリガーボックスは､ 私たちがアルコーブの中に入ったり､

3
00:00:12,290 --> 00:00:16,880
‫アルコーブの中にオブジェクトを置いたりすると､ 私たちに報告してくれるものです｡

4
00:00:16,880 --> 00:00:20,930
‫左上に小さな設計図のメッセージが表示されているのがわかると思います｡

5
00:00:21,110 --> 00:00:29,930
‫そのためには､ オーバーラップやブロック､ さまざまなコリジョン レスポンスが Unreal でどのように動作するのかを理解する必要があります｡

6
00:00:29,930 --> 00:00:31,730
‫潜入して確かめてみよう｡

7
00:00:32,510 --> 00:00:36,510
‫さて､ トレース・チャンネルの仕組みについては､ すでにお馴染みとなりました｡

8
00:00:36,530 --> 00:00:42,650
‫この低木のように､ シーン内のさまざまなオブジェクトにトレース反応を持たせることができることが分かっています｡

9
00:00:42,650 --> 00:00:51,620
‫ここでは､ ウェポントレースには無視の対応をしているが､ ビジビリティートレースはブロックしていることがわかる｡

10
00:00:52,370 --> 00:00:54,890
‫それから､ この防弾ガラスの例もあります｡

11
00:00:54,890 --> 00:01:00,250
‫武器はブロックするが､ 視界は通すレンガの壁と､ 両方をブロックするレンガの壁｡

12
00:01:00,260 --> 00:01:03,790
‫つまり､ トレースチャンネルを使ったこのシステムの仕組みがわかるわけです｡

13
00:01:03,800 --> 00:01:12,230
‫では､ どのオブジェクトがお互いに重なり､ どのオブジェクトが通過し､ どのオブジェクトがブロックするかを決めようとするとどうなるでしょうか｡

14
00:01:12,230 --> 00:01:14,600
‫それは少し複雑になりますね｡

15
00:01:14,630 --> 00:01:21,600
‫これは､ ガーゴイルとポーンを重ね合わせようとしたときに､ すでに見た光景です｡

16
00:01:21,620 --> 00:01:23,540
‫さて､ その仕組みはこうだ｡

17
00:01:23,540 --> 00:01:25,940
‫基本的には､ これらのオブジェクトタイプを使用します｡

18
00:01:26,480 --> 00:01:31,190
‫各オブジェクトは､ 特定のオブジェクトタイプに属することができます｡

19
00:01:31,190 --> 00:01:34,390
‫そして､ これはC++の型システムのようなものとは異なる｡

20
00:01:34,400 --> 00:01:36,740
‫これらは､ コリジョン（衝突）タイプです｡

21
00:01:36,740 --> 00:01:43,640
‫オブジェクトAとオブジェクトBがあり､ それぞれの設定で､ 例えばガーゴイルの設定を見てみると､

22
00:01:43,640 --> 00:01:48,820
‫それぞれのオブジェクトタイプを持っていることがわかります｡

23
00:01:48,830 --> 00:01:56,300
‫こちらは世界の静物ですが､ さらにその下には､ 他の種類の物体に対する反応も用意されているそうです｡

24
00:01:56,300 --> 00:02:02,930
‫つまり､ このオブジェクトは他のワールドのスタティックをブロックし､ 他のワールドのダイナミクスをブロックし､

25
00:02:02,930 --> 00:02:09,530
‫ポーンのタイプに重なり､ 物理ボディをブロックし､ 他のあらゆるタイプをブロックすることがわかります｡

26
00:02:10,040 --> 00:02:16,310
‫そして､ BPプレイヤーを探しに行けば､ 当然ポーンそのものがあります｡

27
00:02:17,040 --> 00:02:24,300
‫そして､ カプセルコンポーネントの詳細を見て､ コリジョンのプリセットがあるところまでスクロールしてください｡

28
00:02:24,300 --> 00:02:29,980
‫Pawn Collisionのプリセットを展開すれば､ 編集はできないが､ 何をしているかはわかる｡

29
00:02:30,000 --> 00:02:34,440
‫そして､ 世界の静止画に対して独自の対応をしていることがわかります｡

30
00:02:34,440 --> 00:02:38,250
‫だから､ 世界の静電気に対する対応は､ それをブロックすることになる｡

31
00:02:38,250 --> 00:02:41,070
‫つまり､ ここには2種類のオプションがあるのです｡

32
00:02:41,070 --> 00:02:49,320
‫ポーンはワールドスタティックをブロックすると言っていますが､ ガーゴイルはポーンをオーバーラップさせると言っています｡

33
00:02:49,320 --> 00:02:50,670
‫では､ どうすればいいのか｡

34
00:02:50,670 --> 00:02:57,780
‫さて､ ここでこの表の出番です｡ このブログ記事へのリンクは､ 講義資料で全文を読みたい方のために用意しました｡

35
00:02:57,780 --> 00:03:02,100
‫つまり､ 両者の間で最もブロッキングの少ないインタラクションが必要であることがおわかりいただけると思います｡

36
00:03:02,100 --> 00:03:08,940
‫つまり､ オブジェクトAがポーンで､ おい､ あのガーゴイルをブロックしろと言っているのに､ ガーゴイルのオブジェクトBで､ おい､

37
00:03:08,940 --> 00:03:11,790
‫あのポーンに重なるようにしろと言っているとします｡

38
00:03:11,790 --> 00:03:15,960
‫だから､ その中で一番ブロックがかからず､ 重なり合うことになるんです｡

39
00:03:16,230 --> 00:03:23,280
‫つまり､ 2つのものが互いにブロックし合うには､ 両者がそれを望んでいることに同意する必要があるということです｡

40
00:03:23,280 --> 00:03:25,410
‫では､ ここで別の例を見てみましょう｡

41
00:03:25,410 --> 00:03:34,800
‫プレイヤーはポーンというオブジェクトタイプで､ 他のポーンに対するオブジェクトの反応はブロック､ 世界の静的オブジェクトに対する反応はブロックとなります｡

42
00:03:34,980 --> 00:03:37,800
‫レンガの壁は､ ワールドスタティックオブジェクトです｡

43
00:03:37,800 --> 00:03:40,350
‫ポーンをブロックしたり､ ワールドスタティックをブロックしたりすることができます｡

44
00:03:40,350 --> 00:03:42,350
‫だから､ この2つは互いに同意することになる｡

45
00:03:42,360 --> 00:03:46,220
‫さて､ シュラフも世界静止ですが､ ポーンが重なります｡

46
00:03:46,230 --> 00:03:50,310
‫ガーゴイルによく似ていますが､ 世界の静止画をブロックします｡

47
00:03:50,310 --> 00:04:02,310
‫ポーンが茂みを通り抜けようとすると､ ブロックが最も少ないオーバーラップという選択肢を取るので､

48
00:04:02,310 --> 00:04:14,910
‫オーバーラップイベントが発生し､ コードやブループリントでフックすることができます｡

49
00:04:14,910 --> 00:04:17,820
‫では､ なぜここまで深入りするのか｡

50
00:04:17,820 --> 00:04:25,830
‫というのも､ この壁の中に基本的に見えないオブジェクトを入れて､ ガーゴイルをここに置くことができるようにし､

51
00:04:25,830 --> 00:04:30,630
‫それが起こったときにイベントを取得したいのです｡

52
00:04:30,630 --> 00:04:36,390
‫だから､ ガーゴイルはイベントを立ち上げて､ 「おい､ 俺と何かが重なってるぞ」と言うのです｡

53
00:04:36,390 --> 00:04:37,860
‫では､ なぜこのようなことが重要なのでしょうか｡

54
00:04:37,860 --> 00:04:45,540
‫なぜなら､ 見えないけれどガーゴイルと重なるオブジェクトを置いて､ その事実を知らせたいからです｡

55
00:04:45,540 --> 00:04:50,460
‫その後､ C++から問い合わせることもできますし､ Blueprintでイベントを取得することもできます｡

56
00:04:50,460 --> 00:04:55,920
‫そして､ その方法は､ まず､ このダンジョンの壁からブループリントを作成します｡

57
00:04:55,920 --> 00:05:01,290
‫詳細ペインでブループリント・ボタンをクリックし､ 新しいサブクラスを作成します｡

58
00:05:01,290 --> 00:05:15,300
‫名前をbeep､ アンダースコアのsecret wallとし､ selectを押して作成し､ メインウィンドウにドケットを作成します｡

59
00:05:15,300 --> 00:05:23,070
‫また､ ここに追加したいのは､ ボックスコリジョンと呼ばれるコンポーネントです｡

60
00:05:23,340 --> 00:05:27,930
‫そこで､ ボックスコリジョンをクリックすると､ 完全に見えなくなるのがわかると思います｡

61
00:05:27,930 --> 00:05:35,100
‫このボックスにガーゴイルを配置すると､ どこにでも受け入れられるように､

62
00:05:35,100 --> 00:05:39,600
‫ボックスの大きさを変更できます｡

63
00:05:40,230 --> 00:05:44,880
‫そして､ この下には衝突のオプションがあることがわかります｡

64
00:05:44,880 --> 00:05:49,200
‫デフォルトとしてオーバーラップオールダイナミックを用意していますが､ デフォルトのプリセットとして｡

65
00:05:49,200 --> 00:05:56,520
‫しかし､ カスタムをクリックすると､ オブジェクトの種類を変更でき､ ここでさまざまなものに反応する方法を変更できることがわかります｡

66
00:05:56,520 --> 00:06:04,170
‫そして､ 最も重要なことは､ ご覧のように､ ほとんどのオブジェクトタイプに重なるように設定されていることだと思います｡ つまり､

67
00:06:04,170 --> 00:06:09,840
‫ワールドダイナミックに重なるように設定されていなくても､ 重なるように設定されているのです｡

68
00:06:09,840 --> 00:06:11,130
‫何も遮るものがない

69
00:06:11,130 --> 00:06:14,250
‫これでガーゴイルをここに配置できそうです｡

70
00:06:14,250 --> 00:06:19,530
‫そこで､ そのコンポーネントをシーンから削除します｡ なぜなら､ このボックスコリジョンをもとに､

71
00:06:19,530 --> 00:06:24,780
‫C++で新しいコンポーネントを作成したいからです｡

72
00:06:24,780 --> 00:06:31,080
‫このボックスで､ デフォルトのプリセットであるオーバーラップオールダイナミックに戻し､

73
00:06:31,080 --> 00:06:40,470
‫チェックするか､ すでにチェックされているオーバーラップイベントを生成するをチェックすると､ このようになります｡

74
00:06:40,470 --> 00:06:48,840
‫次に､ イベントグラフに移動して､ ここを右クリックし､ 重なりを探します｡

75
00:06:48,840 --> 00:06:56,400
‫そして､ 右上にボックスのためのアドオンコンポーネントが重なり始めるのが見えます｡

76
00:06:56,400 --> 00:07:05,760
‫これをクリックして､ 実際にボックスコンポーネントの名前をトリガーエリアに変更してみましょう｡

77
00:07:05,760 --> 00:07:13,410
‫そうすると､ 基本的にトリガー領域と重なった場合､ 重なっているもののプロパティのリストを取得することになるので､

78
00:07:13,410 --> 00:07:16,410
‫それを利用することができます｡

79
00:07:16,850 --> 00:07:17,450
‫重なっていますね｡

80
00:07:17,450 --> 00:07:19,700
‫その名前を知ることができた｡

81
00:07:19,700 --> 00:07:22,850
‫つまり､ 表示名を取得すると､ ノードの名前になります｡

82
00:07:22,850 --> 00:07:32,570
‫そして､ その結果文字列をプリントして､ それを実行ピンにフックすれば､ そのまま再生ボタンを押すことができます｡

83
00:07:32,570 --> 00:07:40,190
‫そして､ その部分に近づいてみると､ ビーププレイヤーというのが重なっているのがわかると思います｡

84
00:07:40,190 --> 00:07:42,080
‫今はその辺りが暗くて見えません｡

85
00:07:42,080 --> 00:07:50,930
‫スポットライトコンポーネントを追加して､ この小さな床の間に置き､

86
00:07:51,290 --> 00:07:59,660
‫下向きに回転させて､ オブジェクトがあるスペースを照らします｡

87
00:07:59,690 --> 00:08:01,940
‫今､ そのシーンでは､ それがはっきりと見えています｡

88
00:08:01,940 --> 00:08:06,560
‫では､ 再生ボタンを押して､ あの床の間まで歩いて行ってみましょう｡

89
00:08:06,560 --> 00:08:14,300
‫重ねてみると､ ビーププレイヤーが重なっていると表示されます｡ 新しく作ったグラバーを使って､

90
00:08:14,300 --> 00:08:24,020
‫このセルからガーゴイルを取りに行って､ そのガーゴイルをこのエリアに配置することができます｡

91
00:08:24,230 --> 00:08:35,510
‫しかし､ オーバーラップイベントは発生しないようです｡ これは､ 私たちが必要としているように､ 衝突の当事者が2人いるからです｡

92
00:08:35,510 --> 00:08:38,510
‫また､ オーバーラップイベントを発生させるために､ 2つのパーティがあります｡

93
00:08:38,510 --> 00:08:48,830
‫そのため､ ボックスコンポーネントでこの機能を有効にしても､ そこに移動するガーゴイルが実際にオーバーラップイベントを警告するわけではありません｡

94
00:08:48,830 --> 00:08:55,220
‫だから､ ガーゴイルのところに行き､ チェックし､ オーバーラップイベントも発生させなければならない｡

95
00:08:55,310 --> 00:08:58,520
‫そうすると､ オーバーラップする事象が起こるはずです｡

96
00:08:58,520 --> 00:09:06,530
‫ガーゴイルを拾って､ 床の間まで連れて行き､ 刺してみよう｡

97
00:09:06,530 --> 00:09:09,440
‫そして今､ イベントが控えているのです｡

98
00:09:09,440 --> 00:09:14,330
‫そうなると､ ガーゴイル像が確かに登録されていることになる｡

99
00:09:14,330 --> 00:09:19,340
‫さて､ 今回はブループリント・イベントを使用することはありません｡

100
00:09:19,340 --> 00:09:32,840
‫そこで､ トリガー・エリア・コンポーネントをC++のコンポーネントに変換し､ ガーゴイル像がすでにあるのかないのかを評価できるようにしたいと思います｡

101
00:09:33,200 --> 00:09:38,150
‫この方法は､ コンポーネントの追加で､ 新しいC++コンポーネントを作成します｡

102
00:09:38,150 --> 00:09:44,540
‫そして､ 親クラスとして､ アクティブコンポーネントやシーンコンポーネントを選択するのではなく､

103
00:09:44,540 --> 00:09:50,990
‫すべてのクラスに移動して､ 代わりにボックスコンポーネントを検索することにします｡

104
00:09:50,990 --> 00:09:56,090
‫そして､ シェイプコンポーネント､ ボックスコンポーネント､ 必要なものが表示されているので､ 先に進んで次をクリックします｡

105
00:09:56,090 --> 00:10:01,040
‫では､ 親クラスの設定方法を紹介したので､ このコンポーネントの作成に挑戦してみたいと思います｡

106
00:10:01,040 --> 00:10:10,220
‫そこで､ トリガーコンポーネントと名付け､ 同じように設定されていないため､ これまで作成した他のコンポーネントからいくつかコピーする必要があります｡

107
00:10:10,220 --> 00:10:15,230
‫別の親から派生しているので､ youクラスの行をコピーする必要があります｡

108
00:10:15,230 --> 00:10:20,600
‫その行全体は､ あなたが作成するトリガーコンポーネント上では基本的に空です｡

109
00:10:20,600 --> 00:10:30,170
‫そのため､ グラバーまたはムーバーのどちらかからコピーします｡ そうしないと､ コンポーネントをブループリントに追加することができません｡

110
00:10:30,170 --> 00:10:40,280
‫そこで､ この新しいトリガーコンポーネントを使用して､ 現在のボックスコンポーネントを置き換え､ Begin Playから何かをプリントする必要があります｡

111
00:10:40,280 --> 00:10:50,410
‫繰り返しますが､ プレイ中の大きな設定は自動的に行われませんので､ 設定するには他のコンポーネントのヘッダーファイルとC++ファイルからコピーする必要があります｡

112
00:10:50,420 --> 00:10:52,400
‫ビデオを一時停止して､ 試してみてください｡

113
00:10:55,580 --> 00:10:56,060
‫なるほど｡

114
00:10:56,060 --> 00:10:57,050
‫お帰りなさい｡

115
00:10:57,050 --> 00:10:59,930
‫そこで､ トリガー部品と呼ぶことにします｡

116
00:10:59,930 --> 00:11:02,300
‫すべて一言で､ クラスを作るために打つ｡

117
00:11:02,300 --> 00:11:10,940
‫また､ エディタでBP secret wallに移動して､ このコンポーネントを追加し､

118
00:11:11,540 --> 00:11:19,340
‫トリガーを検索しても､ 何も表示されないことがわかります｡

119
00:11:19,340 --> 00:11:25,370
‫この理由は､ grab a dot Hでuse classの行を見ると､ ここにblueprint spawn

120
00:11:25,550 --> 00:11:30,350
‫able componentと書かれているのがわかるからです｡

121
00:11:30,350 --> 00:11:33,140
‫だから決定的に､ これをコピーする必要があるのです｡

122
00:11:33,140 --> 00:11:34,340
‫また､ クラスグループも持っています｡

123
00:11:34,340 --> 00:11:40,670
‫このコンポーネントをブループリントで作成し､ トリガー コンポーネントのクラス行として貼り付けることができるため､

124
00:11:40,670 --> 00:11:45,500
‫全体をコピーすることもできます｡

125
00:11:45,920 --> 00:11:50,660
‫そしてもうひとつ､ grabに移動すると､ 大きなplayがあるのがわかりますが､

126
00:11:50,660 --> 00:11:57,470
‫これは保護されたセクションの中にあります｡ begin play関数の定義をコピーして､ トリガーコンポーネントにコピーし､

127
00:11:57,470 --> 00:12:03,590
‫grabberにあったように､ 生成した本体のすぐ下に置きます｡

128
00:12:03,650 --> 00:12:08,480
‫そして､ grab a CPに入り､ どれだけ大きなインプレイが定義されたかを確認することができます｡

129
00:12:08,480 --> 00:12:12,650
‫この中に､ 実は重要なクールからスーパービッグまでの遊びがあることがわかります｡

130
00:12:12,650 --> 00:12:15,920
‫これをコピーして､ トリガー・コンポーネントに移動します｡

131
00:12:15,920 --> 00:12:26,180
‫CP そして､ you grab a colon コロンをyou trigger component, begin playに変えます｡

132
00:12:26,810 --> 00:12:34,220
‫そして､ この中にyou logを入れて､ trigger component aliveのような簡単なメッセージを書いて､

133
00:12:34,220 --> 00:12:38,120
‫先に進んでコンパイルします｡

134
00:12:38,120 --> 00:12:42,890
‫ヘッダーファイルにかなり大きな変更を加えているため､ 少し時間がかかるかもしれません｡

135
00:12:42,890 --> 00:12:49,070
‫それが終わったら､ BPのシークレットウォールに入り､ 「追加」から「トリガー」を検索します｡

136
00:12:49,310 --> 00:12:52,070
‫そして､ この中にトリガー部品があるのがわかると思います｡

137
00:12:52,070 --> 00:12:53,690
‫これで追加できるようになりました｡

138
00:12:53,690 --> 00:12:59,000
‫以前設定したトリガーエリアを削除することができます｡

139
00:12:59,120 --> 00:13:03,770
‫ただ､ それを削除して､ まだ削除したいことを確認してください｡

140
00:13:03,770 --> 00:13:11,930
‫これは基本的に､ 作成したこのイベントを無効にするもので､ もし見るのであれば､ トリガーで衝突が思い通りに設定されていることを確認できます｡

141
00:13:11,930 --> 00:13:15,860
‫しかし､ すべてのダイナミックにオーバーラップし､ オーバーラップイベントが発生するように設定されています｡

142
00:13:15,860 --> 00:13:21,890
‫最後に､ このイベントを置き換える必要があります｡ ここでは､ トリガーを右クリックして､

143
00:13:21,890 --> 00:13:31,370
‫トリガーの衝突の追加イベントを展開し､ コンポーネントの重なりの開始を追加します｡

144
00:13:31,370 --> 00:13:33,050
‫以前はそれを使っていたのです｡

145
00:13:33,170 --> 00:13:41,360
‫アクティブピンを引っ掛け､ 実行ピンを引っ掛けるとダンジョンレベルに向かいます｡

146
00:13:41,690 --> 00:13:48,080
‫ガーゴイルを拾ってきて､ 床の間に貼り付けてみると､ うまくいかないことに気づきます｡

147
00:13:48,080 --> 00:13:50,330
‫これでトリガーが設定されたわけです｡

148
00:13:50,330 --> 00:13:56,360
‫ビューポートに移動してみると､ 実はトリガーが十分な大きさになっていないことがわかると思います｡

149
00:13:56,360 --> 00:13:57,680
‫正しい位置づけができていない｡

150
00:13:57,680 --> 00:14:11,810
‫そこで､ アルコーブの中央に配置して､ ボックスの範囲のプロパティを増やして､ このアルコーブ領域の内側に置くものをすべて捕捉できるようにしましょう｡

151
00:14:12,480 --> 00:14:20,180
‫少し大きめで､ 安全マージンを与えてくれて､ ダンジョンに入ってプレイを押して､ 床の間に足を踏み入れることができれば問題ないのです｡

152
00:14:20,180 --> 00:14:25,340
‫そして案の定､ BPプレイヤーがその床の間に入ってきたことを検知するのです｡

153
00:14:25,370 --> 00:14:25,940
‫素晴らしい内容です｡

154
00:14:25,940 --> 00:14:34,100
‫この講義では､ オブジェクト型とオブジェクト型レスポンスについて学び､ それを使ってこのトリガーコンポーネントをセットアップしました｡

155
00:14:34,100 --> 00:14:35,930
‫それでは､ 次回の講義でお会いしましょう｡

