﻿1
00:00:04,130 --> 00:00:04,610
‫ねえ｡

2
00:00:04,610 --> 00:00:05,450
‫お帰りなさい｡

3
00:00:05,480 --> 00:00:09,080
‫さて､ すでにベースとなる -- C++ クラスを作成しました｡

4
00:00:09,200 --> 00:00:16,310
‫このビデオでは､ そのクラスから派生して､ ベースとなる -- をもとに新しい子クラスを作成します｡

5
00:00:16,340 --> 00:00:19,310
‫では､ なぜそのようなことをしたいのか､ その理由を説明しましょう｡

6
00:00:19,580 --> 00:00:27,080
‫つまり､ この base -- クラスがあり､ base -- から派生する2つの異なるクラスがあることが分かっています｡

7
00:00:27,080 --> 00:00:30,020
‫タンクもあるし､ タワーもある｡

8
00:00:30,050 --> 00:00:34,760
‫さて､ ベースにはメッシュとカプセル､ そしてスポーンポイントが含まれています｡

9
00:00:34,760 --> 00:00:38,210
‫そして､ これらはタンクとタワーの両方が受け継ぐことができるものです｡

10
00:00:38,360 --> 00:00:44,480
‫でも､ タンクとタワーでは､ それぞれ異なる機能も出てきます｡

11
00:00:44,480 --> 00:00:50,720
‫ひとつは､ 戦車が世界の中を動き回り､ しかもプレイヤーに操作されることです｡

12
00:00:50,720 --> 00:00:55,220
‫そのため､ キーボードやマウスから入力を受けるように設定する必要があります｡

13
00:00:55,220 --> 00:00:57,950
‫一方､ タワーはただそこに座っているだけになる｡

14
00:00:57,980 --> 00:01:03,860
‫その行動はすべてコードで制御されるため､ プレイヤーからの入力は必要ありません｡

15
00:01:03,860 --> 00:01:10,010
‫そこで､ タンクとタワーでは動作が異なるため､ 継承を利用してベースクラスの子クラスを作り､

16
00:01:10,010 --> 00:01:18,290
‫共通する部分を継承した上で､ 異なる機能をそれぞれのクラスに追加していくことにします｡

17
00:01:18,290 --> 00:01:23,960
‫エディタに戻って､ C++のクラス､ Tune Tankのフォルダに移動して､

18
00:01:23,960 --> 00:01:29,240
‫ベースとなるクラスと､ そこから派生するクラスを作成します｡

19
00:01:29,240 --> 00:01:35,480
‫ここで右クリックし､ create C++ class derived from base -- を選択します｡

20
00:01:35,480 --> 00:01:43,550
‫そこで､ このクラスを base -- と同じ source slash tune tanks フォルダに置くことを許可してみましょう｡

21
00:01:43,610 --> 00:01:47,360
‫そして､ この名称は､ タンクと呼ぶことにします｡

22
00:01:47,360 --> 00:01:55,400
‫つまり､ 戦車クラスは､ 実際に戦車を操作してワールドを動き回るためのクラスということになります｡

23
00:01:55,430 --> 00:01:57,410
‫それでは､ クラスの作成をクリックしてみましょう｡

24
00:01:57,560 --> 00:02:06,470
‫さて､ コンパイルが終わり､ 新しいタンクファイルとタンクCPを含むvsコードが表示されました｡

25
00:02:06,500 --> 00:02:08,210
‫今､ これらはかなりむき出しになっています｡

26
00:02:08,210 --> 00:02:15,950
‫ここには何もないのですが､ 見えないところでベースとなる -- クラスからいくつかのものを受け継いでいます｡

27
00:02:15,950 --> 00:02:19,580
‫私たちは､ そのようなコンポーネントをベースに追加しています --｡

28
00:02:19,580 --> 00:02:23,810
‫これらはプライベート変数であっても､ このクラスには存在します｡

29
00:02:23,810 --> 00:02:29,030
‫さて､ タンクのクラスができたので､ いくつかのことについて説明しましょう｡

30
00:02:29,030 --> 00:02:31,880
‫戦車には必要だが､ 砲塔には必要ない｡

31
00:02:31,880 --> 00:02:39,530
‫さて､ 戦車を操作するわけですから､ レベル中に転がっている戦車に注目する方法が必要です｡

32
00:02:39,950 --> 00:02:43,880
‫さて､ この写真に写っているのは､ こちらがカメラの部品です｡

33
00:02:43,880 --> 00:02:47,030
‫C++のクラスは､ カメラコンポーネントです｡

34
00:02:47,180 --> 00:02:55,100
‫そして､ この赤い線は､ スプリング・アーム・コンポーネントと呼ばれ､ そのC++クラスは､ スプリング・アーム・コンポーネントです｡

35
00:02:55,100 --> 00:03:01,370
‫これらのコンポーネントを追加することで､ ...カメラの視点から見ることができるようになります｡

36
00:03:01,370 --> 00:03:08,930
‫そして､ カメラとそのスプリングアームが何らかの方法で取り付けられていれば､ 世界のあちこちに......ついて行くことになります｡

37
00:03:08,930 --> 00:03:14,540
‫さて､ ここでエディタに戻って､ --のフォルダに戻り､ BP -- tankを開くと､ ビューポートをクリックして､

38
00:03:14,540 --> 00:03:16,730
‫すべてを見ることができるようになります｡

39
00:03:16,730 --> 00:03:22,100
‫そして､ カプセルカンプを選択して､ 追加をクリックし､ スプリングアームを選択します｡

40
00:03:22,100 --> 00:03:24,080
‫スプリングアームの部品です｡

41
00:03:24,080 --> 00:03:25,610
‫赤い線のように見える｡

42
00:03:25,730 --> 00:03:31,490
‫スプリングアームコンポーネントを選択した状態で､ 別のコンポーネントを追加し､ カメラを選択することができます｡

43
00:03:31,490 --> 00:03:37,400
‫さて､ スプリングアームにカメラを取り付けたら､ 実際にコントロールを始めると､ カメラの視点から見ることができるようになりました

44
00:03:37,400 --> 00:03:41,230
‫--｡

45
00:03:41,240 --> 00:03:43,040
‫今､ スプリングアームはかなり重宝しています｡

46
00:03:43,040 --> 00:03:49,940
‫このターゲットアームの長さがあって､ それを調整すると､ スプリングアームと一緒にカメラも調整されるのがわかると思います｡

47
00:03:49,940 --> 00:03:54,470
‫つまり､ これはカメラとの距離をコントロールする方法なんです--｡

48
00:03:54,470 --> 00:04:00,170
‫これらは間違いなく -- クラスに必要なものですが､ ブループリントで追加するのではなく､

49
00:04:00,170 --> 00:04:04,460
‫C++ 側から追加することにします｡

50
00:04:04,460 --> 00:04:05,750
‫だから､ それらを削除する｡

51
00:04:05,750 --> 00:04:10,130
‫そこで､ 今回のチャレンジでは､ 戦車クラスにあるものを追加していただきたいと思います｡

52
00:04:10,130 --> 00:04:16,790
‫一つは､ スプリングアームのコンポーネントとカメラのコンポーネントが必要なので､ これらの変数を作成し､ ポインタを作成します｡

53
00:04:16,790 --> 00:04:21,920
‫先にパブリックセクションとプライベートセクションを作り､ これらの変数をプライベートセクションに置きます｡

54
00:04:21,920 --> 00:04:27,590
‫さて､ これらをUのプロパティにする必要があるので､ プロパティマクロを与え､ 以前の講義で学んだことに基づいて､

55
00:04:27,590 --> 00:04:31,610
‫適切な指定子をこれらのマクロに記入します｡

56
00:04:31,640 --> 00:04:36,920
‫これらの変数を作成したら､ コンストラクタを作成し､ これを public セクションに記述して

57
00:04:36,920 --> 00:04:46,340
‫CP ファイルに定義します｡ コンストラクタ内では､ デフォルトのサブオブジェクトを作成して､ カメラとスプリングアームのコンポーネントを作成します｡

58
00:04:46,340 --> 00:04:50,750
‫これらの部品は必ずセットアップアタッチメントを使用して何かに取り付けてください｡

59
00:04:50,750 --> 00:04:54,380
‫スプリングアームコンポーネントをルートコンポーネントに取り付けたいと思います｡

60
00:04:54,380 --> 00:05:00,500
‫そこで､ ルートコンポーネントを使用して､ セットアップアタッチメントを設定し､ カメラの場合は､ スプリングアームに取り付けます｡

61
00:05:00,500 --> 00:05:02,870
‫ベースとなる -- クラスを参照することができます｡

62
00:05:03,020 --> 00:05:05,950
‫Aこれらを行うためのコードがどのようなものか､ 思い出してみてください｡

63
00:05:05,960 --> 00:05:09,710
‫先にビデオを一時停止して､ これらのものをタンククラスに追加してください｡

64
00:05:12,580 --> 00:05:13,180
‫わかりました｡

65
00:05:13,180 --> 00:05:14,380
‫だから､ 私たちはタンクにいるんです｡

66
00:05:15,250 --> 00:05:16,540
‫さて､ まず最初に｡

67
00:05:16,540 --> 00:05:20,110
‫公開用と非公開用を用意したい｡

68
00:05:20,350 --> 00:05:24,840
‫そこで､ プライベートセクションに､ これら2つの新しいコンポーネントを追加することになります｡

69
00:05:24,850 --> 00:05:32,290
‫Uスプリングアームのコンポーネントが欲しいところですが､ これはポインタになるので､ このスプリングアームを呼び出すことができます｡

70
00:05:32,290 --> 00:05:37,760
‫また､ 新しいカメラコンポーネントも必要で､ これをカメラと呼ぶことにします｡

71
00:05:37,780 --> 00:05:38,260
‫それでいいんです｡

72
00:05:38,260 --> 00:05:39,970
‫名前が少し違う場合｡

73
00:05:40,090 --> 00:05:46,420
‫さて､ さっそくですが､ ここでインテリセンスのエラーが表示されています｡ つまり､ これらをフォワード宣言する必要があるのです｡

74
00:05:46,420 --> 00:05:51,280
‫そこで､ class with spring armとclass with cameraを使うことにします｡

75
00:05:51,280 --> 00:05:53,150
‫そして今､ これらは前倒しで宣言されました｡

76
00:05:53,170 --> 00:05:55,240
‫では､ 新しいプロパティを用意しましょう｡

77
00:05:55,240 --> 00:05:57,460
‫では､ 新しいプロパティマクロを追加してみましょう｡

78
00:05:57,970 --> 00:06:02,930
‫そして､ プロパティ・マクロの内部には､ いくつかの指定子が必要です｡

79
00:06:02,950 --> 00:06:13,010
‫コンポーネントは､ 詳細パネルでパラメータを調整するために､ どこでも見えるようにする必要があることを確認しました｡

80
00:06:13,030 --> 00:06:20,600
‫今､ イベントグラフに触れる必要性がすぐにあるとは思えないので､ ブループリントの読み込み､ 書き込み､ ブループリントの読み込みのみは必要ないと思います｡

81
00:06:20,620 --> 00:06:21,160
‫それでいいんです｡

82
00:06:21,160 --> 00:06:23,770
‫追加したのであれば､ 今は省いています｡

83
00:06:23,770 --> 00:06:25,630
‫これらにカテゴリーをつける｡

84
00:06:26,410 --> 00:06:33,330
‫これらはコンポーネントなので､ 他のコンポーネントと一緒にコンポーネント・カテゴリーに入れるだけです｡

85
00:06:33,340 --> 00:06:38,940
‫さて､ 私はこれらをイベントグラフに公開しないので､ ここで指定したプライベートアクセスを許可するメタは必要ありません｡

86
00:06:38,950 --> 00:06:45,640
‫だから､ スプリングアームはこれで十分だし､ カメラ部品も同じようにあなたの財産をあげたい｡

87
00:06:46,180 --> 00:06:47,590
‫だから､ それをコピーしているんです｡

88
00:06:47,590 --> 00:06:49,270
‫これで部品が揃いましたね｡

89
00:06:49,420 --> 00:06:54,700
‫次に､ それらをコンストラクタで構成する必要があります｡ つまり､ コンストラクタが必要なのです｡

90
00:06:54,700 --> 00:07:03,910
‫さて､ コンストラクタはクラスと同じ名前になるので､ タンクとなり､ このコンストラクタをCPファイルに定義する必要があります｡

91
00:07:03,910 --> 00:07:08,710
‫では､ Tank CPで戦車を作成してみましょう｡

92
00:07:09,520 --> 00:07:17,710
‫つまり､ 関数本体とタンクコンストラクタには､ クラス名とスコープ解決演算子をプレフィックスとして付ける必要があります｡

93
00:07:17,710 --> 00:07:19,360
‫それが､ このダブルコロンです｡

94
00:07:19,360 --> 00:07:24,850
‫この方法では､ 単に新しい関数を作成するだけでなく､ このクラスのコンストラクタを定義することになります｡

95
00:07:24,850 --> 00:07:27,130
‫では､ これらの部品を組み立てていきたいと思います｡

96
00:07:27,130 --> 00:07:29,530
‫では､ まずスプリングアームから見ていきましょう｡

97
00:07:29,860 --> 00:07:39,160
‫そこで､ スプリングアームイコールデフォルトのサブオブジェクトを作成し､ これをUスプリングアームコンポーネントとします｡

98
00:07:41,260 --> 00:07:45,310
‫そして本文では､ このスプリングアームを単にこう呼ぶことにします｡

99
00:07:46,270 --> 00:07:54,490
‫そして､ アタッチメントには､ スプリングアームを設定し､ アタッチメントを設定し､ ルートコンポーネントを渡します｡

100
00:07:55,920 --> 00:07:56,220
‫今すぐ

101
00:07:56,220 --> 00:07:57,240
‫待ってましたよ｡

102
00:07:57,240 --> 00:07:58,050
‫そこにあるのは

103
00:07:58,050 --> 00:08:03,920
‫不完全なクラスタイプへのポインタというIntelliSenseのエラーは､ 春のアームコンポーネントを使用しています｡

104
00:08:03,930 --> 00:08:10,320
‫それは､ スプリングアームのコンポーネントを作成して使用するので､ ヘッダーファイルをインクルードする必要があるからです｡

105
00:08:10,320 --> 00:08:16,020
‫これが私のアンリアル・エンジンのドキュメントで､ 下にスクロールすると､ 私のインクルードがあります｡

106
00:08:16,020 --> 00:08:21,820
‫それをコピーして､ この一番上､ タンクの縁のすぐ下に貼り付けます｡

107
00:08:21,900 --> 00:08:29,370
‫さて､ 一般的な注意点ですが､ クラスのヘッダーファイルは一番上にインクルードし､ その下にコンポーネントのインクルードを置くことになります｡

108
00:08:29,370 --> 00:08:30,750
‫そこで､ スプリングアームを用意しました｡

109
00:08:30,750 --> 00:08:32,790
‫いよいよカメラの組み立てです｡

110
00:08:32,790 --> 00:08:39,300
‫そこで､ カメラと言うことにして､ デフォルトのサブオブジェクトを作成し､ カメラコンポーネントを作成します｡

111
00:08:40,050 --> 00:08:45,240
‫そして､ テキストマクロでは､ これを単にカメラと呼ぶことにします｡

112
00:08:45,240 --> 00:08:51,120
‫そしてカメラには､ スプリングアームを通すセットアップアタッチメントと呼ぶことにしています｡

113
00:08:51,390 --> 00:08:54,240
‫もちろん､ カメラのヘッダーファイルも必要です｡

114
00:08:54,240 --> 00:08:59,820
‫アンリアル・エンジンのドキュメントで､ ドキュメントを検索と書いてあるところで､ you camera

115
00:08:59,820 --> 00:09:05,490
‫componentと入力すると､ you camera componentが表示されます｡

116
00:09:05,490 --> 00:09:06,600
‫それを選択します｡

117
00:09:06,600 --> 00:09:09,450
‫そして､ カメラコンポーネントのドキュメントです｡

118
00:09:09,450 --> 00:09:14,100
‫このファイルをコピーして､ ファイルの一番上に貼り付けます｡

119
00:09:14,100 --> 00:09:15,930
‫そして､ これでいいはずだ｡

120
00:09:15,960 --> 00:09:18,630
‫さて､ ではこれをコンパイルしてみましょう｡

121
00:09:18,810 --> 00:09:19,230
‫なるほど｡

122
00:09:19,230 --> 00:09:21,180
‫というわけで､ コンパイルに成功しました｡

123
00:09:21,210 --> 00:09:24,210
‫エディターとここに戻ってみよう -- Tank.

124
00:09:24,240 --> 00:09:33,510
‫もちろん､ 何も表示されません｡ なぜなら､ tankはbaseから派生しており､ 先ほど追加したコンポーネントはtankクラスに追加されたものだからです｡

125
00:09:33,510 --> 00:09:39,720
‫つまり､ BP -- tankはtankクラスから派生したものではないので､ これらを取得することはできません｡

126
00:09:39,720 --> 00:09:46,710
‫タンク クラスをベースにした新しいブループリントを作成することもできますが､ その場合､ これらのコンポーネントをもう一度セットアップする必要があります｡

127
00:09:46,710 --> 00:09:50,190
‫それに､ 2回目の作業をする気にはとてもなれません｡

128
00:09:50,190 --> 00:09:55,080
‫この青写真をタンククラスに修復する簡単な方法があります｡

129
00:09:55,080 --> 00:10:01,530
‫クラス設定を選択した状態で詳細パネルを開くと､ クラスオプションが表示され､

130
00:10:01,530 --> 00:10:04,980
‫この親クラスがあります｡

131
00:10:04,980 --> 00:10:13,200
‫ドロップダウンではbase uponになっていますが､ クリックするとtankを検索し､ ベースクラスとしてtankを選択することができます｡

132
00:10:13,200 --> 00:10:17,220
‫そして今､ このブループリントはタンククラスから派生しています｡

133
00:10:17,220 --> 00:10:24,630
‫メッシュやカプセルサイズなど､ コンポーネントに設定したプロパティはすべてそのまま残っていることがわかります｡

134
00:10:24,660 --> 00:10:27,090
‫ただ､ 今､ 私たちはカメラを見ています｡

135
00:10:27,390 --> 00:10:29,730
‫実は､ スプリングアームとカメラもあるんです｡

136
00:10:29,730 --> 00:10:33,720
‫そして､ 今､ スプリングアームを選択すると､ その赤い線が見えます｡

137
00:10:33,720 --> 00:10:34,710
‫だから､ これはすごいことなんです｡

138
00:10:34,710 --> 00:10:38,880
‫だから､ このスプリングアームの部品を取って､ 目標とするアームの長さを変えることができたのです｡

139
00:10:38,880 --> 00:10:52,770
‫また､ 回転モードを選択し､ 少し上に回転させることで､ 水槽に対してカメラが下向きになるように回転を変更することも可能です｡

140
00:10:52,770 --> 00:10:58,500
‫好き だから今､ カメラの位置を変えてはいけないということを指摘したいです｡

141
00:10:58,530 --> 00:11:05,190
‫カメラを選択し､ ワールド内で移動させ､ 位置や角度をちょうどよくするのが魅力的かもしれません｡

142
00:11:05,190 --> 00:11:07,350
‫しかし､ これは正しいやり方ではありません｡

143
00:11:07,350 --> 00:11:13,410
‫正しい方法は､ スプリングアーム部品の回転と目標アーム長を設定することです｡

144
00:11:13,410 --> 00:11:17,790
‫そして､ その理由は､ スプリングアームの先端にカメラを取り付けたいからです｡

145
00:11:17,790 --> 00:11:23,460
‫スプリングアームは､ カメラが壁にぶつかると縮んで障害物を避けたり､

146
00:11:23,460 --> 00:11:29,430
‫池への視界を遮ったりと､ さまざまな機能を内蔵しているんですよ｡

147
00:11:29,430 --> 00:11:35,070
‫ですから､ カメラの位置や回転を調整するのではなく､ そのカメラをスプリングアームの先端に取り付けて､

148
00:11:35,070 --> 00:11:39,990
‫スプリングアームを調整することになるのです｡

149
00:11:40,110 --> 00:11:48,960
‫このビデオでは､ tank クラスを作成し､ base pond から派生させて､ base pond クラスからその品質を継承しています｡

150
00:11:49,140 --> 00:11:56,100
‫スプリングアームコンポーネントとカメラコンポーネントを追加し､ それらを可視のみを使ってエディタに公開し､

151
00:11:56,100 --> 00:11:58,500
‫独自のカテゴリーに入れました｡

152
00:11:58,500 --> 00:12:05,130
‫というわけで､ 一歩一歩完成品に近づいているわけですが､ 次回の講義でも､ このタンクの開発を進めていきます｡

153
00:12:05,460 --> 00:12:06,510
‫また､ お会いしましょう｡

