﻿1
00:00:04,020 --> 00:00:10,620
‫つまり､ 弾を発射して､ 敵のタワーに当たったときや､ 敵のタワーの弾が当たったときなど､

2
00:00:10,620 --> 00:00:18,480
‫何かに当たると爆発するようなエフェクトを出せるようにすることが目的です｡

3
00:00:19,390 --> 00:00:21,310
‫こんにちは､ お帰りなさい｡

4
00:00:21,340 --> 00:00:25,130
‫さて､ ここまでのセクションプランを見てみましょう｡

5
00:00:25,150 --> 00:00:26,780
‫これで､ 戦車ができたことがわかった｡

6
00:00:26,800 --> 00:00:28,250
‫世界中を移動することができます｡

7
00:00:28,270 --> 00:00:30,250
‫敵の砲台クラスを作りました｡

8
00:00:30,250 --> 00:00:36,630
‫私たちのゲームでは､ 体力ダメージと破壊に加え､ 火災の機能と投射を追加しました｡

9
00:00:36,640 --> 00:00:42,970
‫これで勝利条件と敗北条件ができ､ それらをウィジェットでHUDに表示することができました｡

10
00:00:43,000 --> 00:00:53,500
‫つまり､ 弾丸の後ろに煙をたなびかせたり､ 爆発音やサウンドを追加する必要があるのです｡

11
00:00:53,500 --> 00:00:59,760
‫その他にも､ ゲームのスパイスとして､ もう少し洗練されたものにするために､ いくつかのものを追加していく予定です｡

12
00:00:59,770 --> 00:01:03,370
‫さて､ 今回の動画では､ ヒットしたパーティクルを処理します｡

13
00:01:03,370 --> 00:01:06,880
‫投射物が何かにぶつかったときの特殊効果です｡

14
00:01:06,880 --> 00:01:10,000
‫これには､ パーティクルシステムと呼ばれるものが関わってきます｡

15
00:01:10,000 --> 00:01:15,610
‫では､ エディタに戻って､ このプロジェクトにあるパーティクルシステムを見てみましょう｡

16
00:01:15,610 --> 00:01:17,110
‫というわけで､ 編集部にやってきました｡

17
00:01:17,110 --> 00:01:22,840
‫assetsフォルダとeffectsに入り､ ここでは3つのエフェクトを用意しました｡

18
00:01:22,840 --> 00:01:25,600
‫これをパーティクルシステムと呼ぶ｡

19
00:01:25,600 --> 00:01:30,280
‫これでヒットエフェクト､ デスエフェクト､ プロジェクタイルトレイルが揃いました｡

20
00:01:30,280 --> 00:01:37,570
‫次に､ p hit effect をダブルクリックすると､ パーティクルシステムエディタが表示されるのがわかるでしょう｡

21
00:01:37,570 --> 00:01:43,960
‫そして､ この小さなビューポートで､ この爆発が何度も何度も起こるのを見ることになるのです｡

22
00:01:43,960 --> 00:01:50,830
‫さて､ 幸運なことに､ このパーティクルシステムはすでに私たちのために作られていて､ いい感じに爆発しているように見えます｡

23
00:01:50,830 --> 00:01:56,710
‫そして､ この爆発は､ 弾丸が何かにぶつかった瞬間に起こるようにしたいのです｡

24
00:01:56,710 --> 00:01:59,200
‫それが今回の映像の狙いです｡

25
00:01:59,200 --> 00:02:04,210
‫では､ Vのコードで､ プロジェクタイル・クラスに戻りたいと思います｡

26
00:02:04,210 --> 00:02:13,480
‫では､ projectile Hに入り､ このクラスに変数を追加します｡ これはパーティクルシステムとします｡

27
00:02:13,480 --> 00:02:18,070
‫さて､ これはプライベート変数にすることができ､ タイプはUになります｡

28
00:02:18,070 --> 00:02:24,280
‫パーティクルシステムで､ ポインタになるので､ これをヒットパーティクルと呼ぶことにします｡

29
00:02:24,280 --> 00:02:29,140
‫さて､ これを前方に宣言し､ さらに新しいプロパティを与えます｡

30
00:02:29,140 --> 00:02:37,720
‫このように､ 投射物の設計図からこれを設定できるように､ プロパティと私はそれをどこでも作りたいとしましょう｡

31
00:02:37,720 --> 00:02:48,070
‫ついでに､ 他の戦闘変数と関係があるので､ これをカテゴリー「戦闘」に入れることにします｡

32
00:02:48,070 --> 00:02:55,840
‫これは､ ブループリント内から設定する予定なので､ 先に進んでこれをコンパイルできるように､ どこでも編集できるようにしています｡

33
00:02:56,170 --> 00:03:04,660
‫エディタに戻り､ 他のブループリントを閉じて､ ブループリントのアクターフォルダに移動します｡

34
00:03:04,780 --> 00:03:07,510
‫俳優よ､ これが我々のBだ｡  P. を投射することができます｡

35
00:03:07,510 --> 00:03:11,200
‫それを開いて､ 完全なブループリント・エディターを開いてみましょう｡

36
00:03:11,200 --> 00:03:13,360
‫では､ 細部を見ていきましょう｡

37
00:03:13,360 --> 00:03:13,720
‫パネル

38
00:03:13,720 --> 00:03:19,120
‫これらの全体的な変数を見るためには､ BPプロジェクタイルセルフを選択する必要があることを忘れないでください｡

39
00:03:19,120 --> 00:03:22,420
‫そしてこちらが戦闘セクションで､ ヒットパーティクルが表示されています｡

40
00:03:22,420 --> 00:03:26,500
‫ここでドロップダウンを使って､ パーティクルシステムを選択することができます｡

41
00:03:26,500 --> 00:03:32,890
‫この変数のタイプはyou particle systemなので､ ヒットパーティクルにヒットエフェクトを使用することにします｡

42
00:03:32,890 --> 00:03:38,230
‫これで変数ができ､ その値がprojectile blueprintのここに設定されました｡

43
00:03:38,230 --> 00:03:40,750
‫では､ これをコンパイルして保存してみましょう｡

44
00:03:40,780 --> 00:03:47,770
‫さて､ 次のステップは､ 何かにぶつかったらすぐにこのパーティクルシステムを実際に発生させることです｡ つまり､ on hitはこれを行うための完璧な関数です｡

45
00:03:47,770 --> 00:03:55,240
‫今度はパーティクルを発生させてゲームプレイを使用する方法を知る必要があります｡

46
00:03:55,240 --> 00:03:57,880
‫静力学には､ そのための便利な関数があります｡

47
00:03:58,240 --> 00:04:07,060
‫これはspawn emitter at locationと呼ばれるもので､ 指定された場所と回転で指定された効果を再生すると言うものです｡

48
00:04:07,240 --> 00:04:09,460
‫火と忘れる｡

49
00:04:09,580 --> 00:04:14,710
‫これは､ 削除や消去を気にする必要がないのでいいですね｡

50
00:04:14,710 --> 00:04:17,140
‫この機能を発射させるだけです｡

51
00:04:17,140 --> 00:04:22,300
‫パーティクルシステムをスポーンして､ 掃除もやってくれるし､ 最高です｡

52
00:04:22,300 --> 00:04:25,210
‫では､ 次に構文を見てみましょう｡

53
00:04:25,210 --> 00:04:30,520
‫入力パラメータはいくつもあるが､ この関数にはオーバーロードがある｡

54
00:04:30,520 --> 00:04:37,240
‫さて､ この関数にはいくつものバージョンがあるので､ Vのコードに入り､ それらのバージョン違いを見てみましょう｡

55
00:04:37,690 --> 00:04:44,050
‫では､ 射的CPを開いて､ 命中時の機能を見てみます｡

56
00:04:44,050 --> 00:04:52,570
‫この下にyou gameplay statics spawn emitter

57
00:04:52,570 --> 00:04:58,990
‫at locationと入力します｡

58
00:04:58,990 --> 00:05:03,940
‫しかし､ 3つのうちの1つを見ることができます｡ つまり､ この関数には3つの異なるバージョンがあるということです｡

59
00:05:03,940 --> 00:05:05,260
‫3つのオーバーロード

60
00:05:05,290 --> 00:05:10,900
‫下矢印を2回クリックして､ この特定のオーバーロードを見てみることにします｡

61
00:05:10,990 --> 00:05:18,850
‫現在では､ ワールドコンテキストオブジェクト､ パーティクルシステム､ ロケーションを受け取り､ 残りの入力パラメータは持っています｡

62
00:05:19,210 --> 00:05:21,460
‫デフォルト値なので､ 任意｡

63
00:05:21,490 --> 00:05:25,940
‫回転パラメータがゼロローテーターに設定されていることに注意してください｡

64
00:05:25,960 --> 00:05:34,030
‫ここで､ get active rotationを渡すことで､ エミッタの回転をアクタの回転に設定することができます｡

65
00:05:34,150 --> 00:05:39,730
‫あまり重要ではありませんが､ アクターと同じ回転でエミッターをスポーンしたいのです｡

66
00:05:39,730 --> 00:05:43,510
‫だから､ get active rotationを使って､ それをパスしたいんです｡

67
00:05:43,510 --> 00:05:45,580
‫しかし､ これらのパラメータの残りはオプションである｡

68
00:05:45,580 --> 00:05:54,010
‫つまり､ パーティクルシステムを再生するためには､ 位置でspawn emitterを呼び出す必要があることが分かっているので､ on hit関数でこれを行うことができるのです｡

69
00:05:54,400 --> 00:06:00,310
‫最初のパラメータがワールドコンテキストオブジェクトであることは分かっており､ それをどう扱うかは既に分かっている｡

70
00:06:00,430 --> 00:06:06,100
‫パーティクルシステムを取ることは分かっているので､ パーティクルシステムの変数を渡すことができます｡

71
00:06:06,130 --> 00:06:16,330
‫また､ 位置と回転が必要なことも分かっており､ アクタの位置と回転を取得する方法も分かっています｡

72
00:06:16,330 --> 00:06:22,450
‫せっかくなので､ 投射物クラスのon hit関数でU gameplay statics function

73
00:06:22,450 --> 00:06:27,580
‫spawn emitter at locationを使って欲しいです｡

74
00:06:27,580 --> 00:06:34,120
‫ワールドコンテキストオブジェクトにこれを渡し､ パーティクルシステムそのものを渡し､ 新しく作成したヒットパーティクル変数を渡し､

75
00:06:34,120 --> 00:06:44,290
‫投射物の位置はアクティブな位置を取得し､ 投射物の回転はアクターの回転を取得することで使用します｡

76
00:06:44,680 --> 00:06:49,390
‫ビデオを一時停止し､ 今すぐオンヒット機能でエミッターをスポーンします｡

77
00:06:53,310 --> 00:06:53,640
‫なるほど｡

78
00:06:53,640 --> 00:07:00,090
‫そこで､ この関数のオーバーロードを見るためだけに使っていたこの行を削除してみます｡

79
00:07:00,090 --> 00:07:04,080
‫そして､ アクターを破壊する直前にこれを配置するつもりです｡

80
00:07:04,080 --> 00:07:08,010
‫だから､ 例えば関数の最後に置いたとしても､ それはそれでいいんです｡

81
00:07:08,040 --> 00:07:10,320
‫課題は､ あなたにとって未完成のままでした｡

82
00:07:10,320 --> 00:07:19,050
‫しかし､ アクターを破壊する直前にこれを配置するつもりです｡ アクターを破壊してしまうと､ その後にパーティクルを生成する意味がなくなってしまうからです｡

83
00:07:19,050 --> 00:07:21,570
‫そこで､ アクターを破壊する前に､ この作業を行うことにします｡

84
00:07:21,570 --> 00:07:32,370
‫まず､ ワールドコンテキストオブジェクトが必要で､ これは次のようなものになります｡

85
00:07:32,400 --> 00:07:40,950
‫次に､ ヒットパーティクルと､ アクターの位置情報を取得する必要があります｡

86
00:07:41,040 --> 00:07:50,820
‫次に､ アクターの回転を取得するために回転を渡します｡ そして､ その場所でエミッターを生成します｡

87
00:07:50,850 --> 00:07:57,600
‫さて､ 一つ指摘しておきたいのは､ もし私のオーナーがヌルポインターで､ この関数から早く戻ってきた場合､

88
00:07:57,600 --> 00:08:02,520
‫そこで投射物を破壊するのが良いアイデアかもしれないということです｡

89
00:08:02,520 --> 00:08:09,330
‫そこで､ このreturnステートメントを削除して､ このifステートメントに独自のボディを与えてもreturnが返されるようにしたいと思います｡

90
00:08:09,330 --> 00:08:13,920
‫しかし､ 帰る直前には､ 俳優を破壊しているはずだ｡

91
00:08:13,920 --> 00:08:17,160
‫そこで､ このifチェックでここのdestroyを呼び出すことにします｡

92
00:08:17,250 --> 00:08:27,240
‫実際､ ここで他のアクターのチェックをすべて失敗したとしても､ 投射物が世界でダラダラと動き回るのは困ります｡

93
00:08:27,240 --> 00:08:31,770
‫そこで､ この2回目の呼び出しを､ ifチェックの外側のdestroyに移動させる必要があります｡

94
00:08:31,770 --> 00:08:35,670
‫そうすれば､ 何があっても何かにぶつかったら弾を破壊していることになりますから｡

95
00:08:35,670 --> 00:08:39,120
‫そうすれば､ どう考えても残弾がないんです｡

96
00:08:39,120 --> 00:08:39,680
‫いい？

97
00:08:39,690 --> 00:08:44,940
‫また､ 安全性を確保するために､ ここではヒットパーティクルを使用しています｡ つまり､ ヒットパーティクルが設定されているかどうかを､

98
00:08:44,940 --> 00:08:49,800
‫使用する前に確認する必要があります｡

99
00:08:49,800 --> 00:08:56,700
‫そうでなければ､ 設定されていないヒットパーティクル変数を使用している可能性があり､ NULLポインタを使用するべきではありません｡

100
00:08:56,700 --> 00:09:03,690
‫そこで､ ヒットパーティクルが有効かどうかを確認するために､ ここにifチェックを置き､ 有効であれば､

101
00:09:03,690 --> 00:09:07,320
‫この場所でエミッターをスポーンしても安全です｡

102
00:09:07,350 --> 00:09:08,280
‫わかりました｡

103
00:09:08,280 --> 00:09:10,380
‫では､ これをコンパイルしてみましょう｡

104
00:09:10,470 --> 00:09:16,200
‫そしてコンパイルに成功したら､ エディタに戻り､ ここにBPの弾丸があります｡

105
00:09:16,200 --> 00:09:21,420
‫ヒットパーティクルが設定されているので､ テストする前にそれが設定されていることを確認してください｡

106
00:09:21,420 --> 00:09:23,010
‫そうでなければ､ 何も見えてきません｡

107
00:09:23,010 --> 00:09:30,300
‫そして､ 再生ボタンを押せば､ ウィジェットが起動するのを待ち､ ドカンとチェックすることができます｡

108
00:09:30,300 --> 00:09:32,580
‫煙のようなものが出ています｡

109
00:09:32,580 --> 00:09:35,880
‫ヒットパーティクルが発生している

110
00:09:35,880 --> 00:09:44,820
‫これから敵を撃っていくのですが､ 敵を撃っているときにもスポーンされるのがわかりますね｡

111
00:09:45,450 --> 00:09:46,440
‫完璧です｡

112
00:09:46,800 --> 00:09:50,430
‫まとめると､ これでヒットパーティクルがいくつか生まれましたね｡

113
00:09:50,430 --> 00:09:54,780
‫私たちの弾丸が世界の何かにぶつかると爆発します｡

114
00:09:54,780 --> 00:10:00,960
‫そして､ 次のステップは､ 空中を飛んでいる弾の後ろに煙の軌跡をつけることです｡

115
00:10:00,960 --> 00:10:04,200
‫そして､ 次のビデオでそれを解決します｡

116
00:10:04,740 --> 00:10:05,700
‫また､ お会いしましょう｡

