﻿1
00:00:04,130 --> 00:00:11,930
‫そこで､ このビデオでは､ 実際に空中に発射され､ 投射物としてのあるべき振る舞いをする投射物を作ることを目標としました｡

2
00:00:12,020 --> 00:00:13,520
‫やあ､ お帰りなさい｡

3
00:00:13,550 --> 00:00:19,430
‫このビデオでは､ 投射物を実際に投射物として動作させ､ 移動させることに焦点をあてています｡

4
00:00:19,610 --> 00:00:22,040
‫さて､ これにはさまざまな対処法があります｡

5
00:00:22,070 --> 00:00:28,220
‫一つは､ 投射物の位置と回転を自分たちで手動で設定する方法です｡

6
00:00:28,250 --> 00:00:34,940
‫さて､ この場合､ 一般的には毎フレーム更新する必要があるので､ おそらくtick関数にこれを入れるでしょう｡

7
00:00:35,210 --> 00:00:41,810
‫もう一つの方法は､ 単純に弾丸にインパルスを追加して､ 物理エンジンに任せることです｡

8
00:00:41,900 --> 00:00:51,380
‫本来､ 力を加えてその弾丸を発射し､ 重力に任せると､ 弾丸はそのまま空中に飛んでいくのです｡

9
00:00:51,410 --> 00:00:55,310
‫さて､ もう一つの方法は､ ムーブメントコンポーネントを使うことです｡

10
00:00:55,340 --> 00:01:00,560
‫さて､ これは特殊なタイプのコンポーネントで､ 射影機クラスに追加することになります｡

11
00:01:00,560 --> 00:01:08,060
‫そして､ ムーブメントコンポーネントにいくつかのパラメータを設定すると､ ムーブメントコンポーネントがアクターの動きを処理するようになります｡

12
00:01:08,090 --> 00:01:15,860
‫偶然にも､ Unreal Engine には､ 投射物用に特別に作られたコンポーネントが内蔵されています｡

13
00:01:15,860 --> 00:01:20,210
‫そのため､ Unreal Engine に組み込まれている機能のいくつかを利用しています｡

14
00:01:20,210 --> 00:01:27,020
‫そして､ こうすることで､ 私たちが提供した設定に基づき､ 動作コンポーネントが私たちに代わって動作を処理することができるようになるのです｡

15
00:01:27,020 --> 00:01:29,360
‫というわけで､ この方法です｡

16
00:01:29,360 --> 00:01:35,750
‫そこで､ projectile クラスに projectile movement コンポーネントを追加して､ projectile

17
00:01:35,750 --> 00:01:38,690
‫オブジェクトの動きを処理するようにしたいと思います｡

18
00:01:38,690 --> 00:01:45,440
‫そのため､ ワールドに投射物を生成すると､ 設定した投射物移動クラスの変数に基づいて､

19
00:01:45,440 --> 00:01:52,190
‫投射物クラスに属する投射物移動コンポーネントを設定・カスタマイズすることができる｡

20
00:01:52,220 --> 00:01:58,340
‫次に､ 初速や最高速度を設定し､ 発射体の移動コンポーネントは､

21
00:01:58,340 --> 00:02:02,750
‫実際に発射体を移動させます｡

22
00:02:02,780 --> 00:02:06,290
‫さて､ ここで「Unreal Engine Documentation」のページをご紹介します｡

23
00:02:06,290 --> 00:02:07,940
‫プロジェクタイルムーブメントコンポーネント｡

24
00:02:07,940 --> 00:02:16,700
‫Projectile Movement Componentは､ そのtick中に他のコンポーネントの位置を更新すると書かれているのがわかると思います｡

25
00:02:16,700 --> 00:02:19,340
‫デフォルトでは､ ルートコンポーネントを移動するようになっています｡

26
00:02:19,370 --> 00:02:20,900
‫さて､ ここでインクルードです｡

27
00:02:20,900 --> 00:02:26,810
‫さらにスクロールしていくと､ ムーブメントコンポーネントに設定できる変数のいくつかが見えてきます｡

28
00:02:26,810 --> 00:02:30,740
‫だから､ これをスクロールして見て､ 選択肢があることを確認します｡

29
00:02:30,770 --> 00:02:36,770
‫ここで､ 他のコンポーネントを追加するのと同じように､ 投射物の動きを表すコンポーネントをクラスに追加します｡ つまり､

30
00:02:36,770 --> 00:02:39,350
‫この方法はすでにご存知だということです｡

31
00:02:39,350 --> 00:02:49,310
‫ですから､ あなたの課題は､ 発射体クラスで､ 発射体移動コンポーネントのポインタ変数を追加し､ これをどこでも見えるようにして公開することです｡

32
00:02:49,310 --> 00:02:54,140
‫そうすることで､ ブループリントの中から投射物の移動コンポーネントを簡単に編集できるようになります｡

33
00:02:54,150 --> 00:02:59,560
‫次に､ create default sub object を使って projectile constructor で構築します｡

34
00:02:59,570 --> 00:03:06,920
‫適切なヘッダーを含めることと､ 発射体の移動コンポーネントの初速と最高速度の変数を設定することを忘れないでください｡

35
00:03:06,920 --> 00:03:12,650
‫では､ これらの値を自分で選んでコンストラクタに設定し､ ゲームをプレイテストしてみましょう｡

36
00:03:12,650 --> 00:03:19,790
‫投射物ブループリントのコンポーネントを選択して､ 詳細パネルで初速と最大速度を調整することになります｡

37
00:03:19,790 --> 00:03:25,910
‫そして､ これで開発者としてパラメータをいじったり､ 実験したりする経験を少しは積むことができます｡

38
00:03:25,910 --> 00:03:30,080
‫そこで､ ビデオを一時停止して､ 今､ 投射物の動きのコンポーネントを作成します｡

39
00:03:32,900 --> 00:03:33,180
‫なるほど｡

40
00:03:33,230 --> 00:03:39,380
‫それで､ 私はここprojectile Hで､ あなたはおそらくプライベートセクションでコンポーネントを追加しました｡

41
00:03:39,380 --> 00:03:41,780
‫だから､ もしそうなら､ あなたは正しい直感を持っています｡

42
00:03:41,780 --> 00:03:43,730
‫これをプライベート変数にするのです｡

43
00:03:43,730 --> 00:03:44,180
‫それでいいんです｡

44
00:03:44,180 --> 00:03:48,040
‫そうでない場合は､ 希望すれば簡単に非公開のセクションに移動することができます｡

45
00:03:48,050 --> 00:03:54,560
‫さて､ これはU弾の動作部品になりますが､ これはポインターです｡

46
00:03:54,560 --> 00:03:58,610
‫そして､ これを単純に射影運動成分と呼ぶことができる｡

47
00:03:58,760 --> 00:04:05,300
‫では､ これをUプロパティにして､ 単純にどこでも見えるようにします｡

48
00:04:06,020 --> 00:04:08,210
‫さて､ あなたはおそらくカテゴリーをあげたと思います｡

49
00:04:08,210 --> 00:04:13,130
‫そうでない場合は､ 全然構わないのですが､ カテゴリーを与えてムーブメントと呼ぶことにしています｡

50
00:04:13,130 --> 00:04:15,650
‫そこで､ 投射動作のコンポーネントを用意しました｡

51
00:04:15,650 --> 00:04:20,660
‫フォワード宣言を省いて､ ここprojectile CPで今コンパイルしてうまくいくかどうか､

52
00:04:20,660 --> 00:04:24,290
‫ヘッダファイルをインクルードして見ます｡

53
00:04:24,290 --> 00:04:31,340
‫そこで､ ドキュメント・ページに戻って､ このインクルードをコピーして､ projectileのここに単純にペーストしてみることにします｡

54
00:04:31,340 --> 00:04:34,250
‫これで､ コンポーネントを作る準備ができました｡

55
00:04:34,250 --> 00:04:42,440
‫投射動作コンポーネントと言い､ デフォルトのサブオブジェクトを作成し､

56
00:04:42,440 --> 00:04:48,140
‫タイプは投射動作コンポーネントにします｡

57
00:04:48,470 --> 00:04:55,760
‫そして本文では､ この射線移動コンポーネントをそのまま単純に呼び出すことにします｡

58
00:04:55,760 --> 00:04:59,300
‫そこに私のセミコロンがあり､ そこに私たちがいるのです｡

59
00:04:59,330 --> 00:05:07,850
‫ここでは､ 射的の動きを設定し､ コンポーネントの最大速度を設定します｡

60
00:05:07,850 --> 00:05:17,600
‫初期速度をたとえば1300Fとします｡

61
00:05:17,600 --> 00:05:25,490
‫今度は発射体の移動成分初速を設定してみます｡

62
00:05:25,910 --> 00:05:31,190
‫つまり初速とは､ 発射部品がスタートするときの速さになるわけです｡

63
00:05:31,190 --> 00:05:33,710
‫もちろん､ 最高速度を超えることはありません｡

64
00:05:33,860 --> 00:05:35,750
‫では､ これをコンパイルしてみましょう｡

65
00:05:36,050 --> 00:05:42,200
‫さて､ コンパイルエラーが発生し､ 上に行くとprojectile hを参照していることがわかります｡

66
00:05:42,350 --> 00:05:47,240
‫では､ プロジェクタイルHに戻ると､ プロジェクタイルH27と書かれています｡

67
00:05:47,240 --> 00:05:51,020
‫27行目を参照しており､ それはこの行のことです｡

68
00:05:51,140 --> 00:05:56,090
‫そして､ この射的の移動成分は射的のメンバーではないことを得る｡

69
00:05:56,120 --> 00:05:59,990
‫フォワード宣言をしていないときに､ このようなエラーが発生したことを覚えておいてください｡

70
00:05:59,990 --> 00:06:07,400
‫そこで､ これをclassキーワードで簡単に前倒し宣言して､ 再度コンパイルすると､ コンパイルに成功します｡

71
00:06:07,400 --> 00:06:12,830
‫つまり､ 繰り返しになりますが､ こうして特定のコンポーネントがデフォルトで含まれているかどうかを知ることができるのです｡

72
00:06:12,830 --> 00:06:17,270
‫そして､ こちらはコンパイルに成功してそうでないことを確認しました｡

73
00:06:17,270 --> 00:06:18,890
‫エディターに戻ろう

74
00:06:19,280 --> 00:06:26,030
‫さて､ エディタに戻って､ 設計図とアクターを開きます｡ これがBFP弾です｡

75
00:06:26,300 --> 00:06:28,190
‫そこで､ ここNPプロジェクタイル｡

76
00:06:28,190 --> 00:06:32,090
‫今､ 投射動作のコンポーネントがここにあるのがわかります｡

77
00:06:32,390 --> 00:06:43,280
‫詳細パネルでは､ 発射体の下に初速と最高速度があり､ スクロールして他の多くのパラメータを設定することができます｡

78
00:06:43,400 --> 00:06:44,840
‫では､ これをプレイテストしてみましょう｡

79
00:06:44,840 --> 00:06:49,190
‫再生と左クリックを押して確認します｡

80
00:06:49,190 --> 00:06:51,200
‫私たちの弾丸は動いています｡

81
00:06:51,200 --> 00:06:55,550
‫空中を飛んでいて､ 実際に何かにぶつかると止まってしまうのです｡

82
00:06:55,550 --> 00:07:00,260
‫さて､ 最終的にやりたいことは､ 爆発させて被害を出すことです｡

83
00:07:00,260 --> 00:07:02,780
‫しかし､ これは素晴らしい出発点です｡

84
00:07:02,780 --> 00:07:08,420
‫では､ 射程距離内に移動して､ タレットが投射物を生み出すかどうか見てみましょう｡

85
00:07:08,420 --> 00:07:09,740
‫もちろん､ そんなことはない｡

86
00:07:09,740 --> 00:07:13,640
‫その理由は､ そのTWのサブクラスの変数を持っているからです｡

87
00:07:13,640 --> 00:07:19,730
‫だから､ なぜタレットが実際に投射物を産んでいなかったのかというと､ その設定はしていないかもしれないのです｡

88
00:07:19,730 --> 00:07:25,370
‫では､ 先に池に入ってビープ池､ タレット､ フル設計図を開いてみましょう｡

89
00:07:25,370 --> 00:07:29,960
‫編集部 そして､ 戦闘セクションに投射機クラスを配置しました｡

90
00:07:29,960 --> 00:07:38,780
‫これはBP projectileのサブクラスで､ これをBP projectileに設定すると､ タレットも同様に投射物を生成し始めるはずです｡

91
00:07:38,780 --> 00:07:41,960
‫だから､ 火の届く範囲に入ろう､ そうすればいいんだ｡

92
00:07:41,960 --> 00:07:43,910
‫弾丸を撃ってくる｡

93
00:07:43,910 --> 00:07:46,550
‫だから､ これはすごいことになっている｡

94
00:07:47,030 --> 00:07:48,950
‫だから､ 今は投射材があるんです｡

95
00:07:48,950 --> 00:07:51,230
‫では､ セクションプランを見てみましょう｡

96
00:07:51,230 --> 00:07:59,150
‫すでに世界各地を移動できる戦車を作成し､ WASDキーとマウスクリックによる入力を処理しています｡

97
00:07:59,150 --> 00:08:06,590
‫敵の砲台クラスを作り､ C++でtowerと呼び､ 投射物による射撃機能を追加しています｡

98
00:08:06,590 --> 00:08:11,240
‫さて次に､ このゲームにおけるヘルスダメージと破壊の処理についてです｡

99
00:08:11,240 --> 00:08:15,770
‫これが次のステップで､ これらはこれからビデオで紹介します｡

100
00:08:15,770 --> 00:08:21,890
‫さて､ 弾丸の移動要素が追加されたので､ 今度は実際の弾丸が登場します｡

101
00:08:21,890 --> 00:08:29,270
‫次回のビデオでは､ これらの弾丸を実際に爆破してダメージを与える方法について説明します｡

102
00:08:29,690 --> 00:08:30,650
‫また､ お会いしましょう｡

