﻿1
00:00:04,380 --> 00:00:04,920
‫ねえ｡

2
00:00:04,920 --> 00:00:05,810
‫お帰りなさい｡

3
00:00:05,820 --> 00:00:11,610
‫ゲームを完成させる準備はできています｡ つまり､ ゲームを磨き上げ､ 満足のいく状態にするために､

4
00:00:11,610 --> 00:00:15,150
‫あと数項目が残っているだけです｡

5
00:00:15,150 --> 00:00:17,730
‫だから､ このゲームを仕上げる準備をするんだ｡

6
00:00:17,730 --> 00:00:19,170
‫あと少しで完成です｡

7
00:00:19,170 --> 00:00:21,450
‫いくつかの機能を追加するだけです｡

8
00:00:21,450 --> 00:00:25,980
‫カメラの動きをもう少し滑らかにしたいので､ まずはそこから｡

9
00:00:26,010 --> 00:00:35,250
‫また､ 戦車が死んだ後もタワーが投射物を発射していることに気づいたので､ それを防ぐためにコードを簡単に修正することができます｡

10
00:00:35,250 --> 00:00:40,410
‫それと､ 投射物のスポーンポイントの潜在的な問題を訪ねます｡

11
00:00:40,410 --> 00:00:43,380
‫だから､ このゲームに飛び込んで磨きをかけよう｡

12
00:00:43,740 --> 00:00:46,920
‫さて､ まず最初に見ておきたいのは､ カメラの動きです｡

13
00:00:46,920 --> 00:00:50,670
‫では､ 再生ボタンを押すと､ その様子をお見せします｡

14
00:00:50,820 --> 00:00:58,380
‫私が移動すると､ カメラが私たちの動きにぴったりとついてくるのがわかると思います｡ 私たちがターンしたり､

15
00:00:58,380 --> 00:01:03,210
‫前進したり後退したりすると､ カメラも自動的についてきます｡

16
00:01:03,210 --> 00:01:08,850
‫さて､ このカメラにちょっとだけスムーズな操作を加えることができる素敵なトリックがあります｡

17
00:01:08,850 --> 00:01:11,730
‫それでは､ BP池の水槽を開けてみましょう｡

18
00:01:11,940 --> 00:01:16,830
‫ここでBP Pond Tankで､ スプリングアームの部品を選択することにします｡

19
00:01:16,830 --> 00:01:24,360
‫カメララグで検索すると､ このラグセクションに､ カメララグを有効にする､ というチェックボックスがありますね｡

20
00:01:24,390 --> 00:01:28,440
‫それを確認して､ カメラ回転のラグを有効にします｡

21
00:01:28,470 --> 00:01:30,240
‫それも確認するつもりです｡

22
00:01:30,240 --> 00:01:39,780
‫これにより､ カメラが遅れてもスムーズに追いつくことができ､ プロフェッショナルなカメラのような効果を得ることができます｡

23
00:01:39,780 --> 00:01:42,810
‫さっそく再生ボタンを押して､ テストしてみましょう｡

24
00:01:42,810 --> 00:01:50,490
‫だから､ 私が動くと､ カメラは短い時間で私たちの動きに追いついてきます｡

25
00:01:50,490 --> 00:01:53,190
‫そして､ 回転しているときも同じです｡

26
00:01:53,190 --> 00:02:00,840
‫つまり､ ちょっとした慣性があり､ カメラがある種の滑走路の上にいて､ ゆっくりと停止するような感じなのです｡

27
00:02:00,840 --> 00:02:07,710
‫次に､ スプリングアームを選択し､ カメララグスピードと回転ラグスピードを変更することができます｡

28
00:02:07,710 --> 00:02:16,950
‫では､ 例えばこれを10ではなく5と5のように小さな値で配置すると､ どのように見えるか見てみましょう｡

29
00:02:17,040 --> 00:02:21,450
‫それで動いているのですが､ カメラに少しラグがあるのがわかると思います｡

30
00:02:21,450 --> 00:02:25,170
‫あとは､ これを自由に増やしたり減らしたりすればいいのです｡

31
00:02:25,170 --> 00:02:31,170
‫これは試してみて､ 自分に合った値を見つけることができるものです｡

32
00:02:31,200 --> 00:02:36,930
‫ここでは2という値になっていますが､ 私にとってはちょっとラグが大きすぎるんです｡

33
00:02:36,930 --> 00:02:41,100
‫だから､ 5と2の間くらいがちょうどいいと思うんです｡

34
00:02:41,100 --> 00:02:46,290
‫こういう価値が好きなら､ 2か､ それ以下にしておくといいかもしれませんね｡

35
00:02:46,290 --> 00:02:55,320
‫でも､ これを例えば､ カメラのタイムラグ速度が4､ カメラの回転ラグ速度が4という値にしています｡

36
00:02:55,350 --> 00:02:57,270
‫その様子を見てみましょう｡

37
00:02:57,270 --> 00:02:59,850
‫だから､ 私が動くと､ カメラが遅れてしまう｡

38
00:02:59,850 --> 00:03:03,660
‫明らかにカメララグがありますが､ それほどでもないです｡

39
00:03:03,660 --> 00:03:09,660
‫これは実際にかなりいい感じだと思うので､ かなり満足しています｡

40
00:03:10,320 --> 00:03:15,960
‫次の項目は､ 戦車がすでに死んでしまった後の塔の発砲です｡

41
00:03:15,960 --> 00:03:18,930
‫では､ さっそくご紹介しましょう｡

42
00:03:19,020 --> 00:03:19,740
‫これでよしとしよう｡

43
00:03:19,740 --> 00:03:23,880
‫戦車は死にましたが､ 塔はまだ撃っています｡

44
00:03:23,970 --> 00:03:26,970
‫さて､ これはタンクがまだ存在しているからです｡

45
00:03:26,970 --> 00:03:31,290
‫そして､ 射程内にある限り､ タワーは発射され続けるのです｡

46
00:03:31,290 --> 00:03:38,130
‫これは､ 水槽が死んだかどうかをチェックする変数のようなものを用意すれば簡単に処理できます｡

47
00:03:38,520 --> 00:03:48,690
‫そこで､ このタンククラスとタンク､ そしてタンクがまだ生きているかどうかをチェックできるブール変数を追加します｡

48
00:03:48,690 --> 00:03:53,580
‫そして､ クラスの外からアクセスする予定なので､ これを公開することにします｡

49
00:03:53,580 --> 00:04:01,500
‫そこで､ これをBe Aliveというブル変数にして､ デフォルトでtrueに等しい値を設定することにします｡

50
00:04:01,500 --> 00:04:09,270
‫つまり､ タンクは最初aliveの状態で始まり､ タンクが死ぬとaliveがfalseに設定されるのです｡

51
00:04:09,270 --> 00:04:14,130
‫そしてそれは､ ハンドル破壊におけるタンクCPでも起こりうることです｡

52
00:04:14,130 --> 00:04:16,530
‫では､ ここでハンドル破壊に踏み切ろう｡

53
00:04:16,530 --> 00:04:23,070
‫そして､ これらの他のプロパティを設定した後､ B aliveをfalseに等しく設定するつもりです｡

54
00:04:23,190 --> 00:04:33,120
‫つまり､ B aliveにfalseをセットしているので､ 戦車が死んだかどうかを知ることができ､ このブール値をチェックすることで単純に弾を発射しないようにすることができるのです｡

55
00:04:33,120 --> 00:04:38,790
‫それでは､ タワードットとCP､ そしてここのチェックファイヤーコンディションに入りましょう｡

56
00:04:38,790 --> 00:04:42,990
‫戦車が生きていることを確認してから発射すればいい｡

57
00:04:42,990 --> 00:04:46,290
‫そこでまず､ タンクが有効かどうかを確認します｡

58
00:04:46,290 --> 00:04:52,560
‫tankがnull pointerと等しいなら､ 単純にearlyを返すと言うことにしています｡

59
00:04:52,560 --> 00:04:59,010
‫そうすれば､ Tankが有効であることがわかります｡ それから､ 射撃範囲内にいるかどうかを確認するために､

60
00:04:59,010 --> 00:05:03,420
‫andを追加してTankが生きているかどうかを確認するつもりです｡

61
00:05:03,450 --> 00:05:03,870
‫タンクなら｡

62
00:05:03,980 --> 00:05:05,830
‫生きているならば､ 発射できる｡

63
00:05:05,840 --> 00:05:08,840
‫タンクが生きていなければ､ 発砲しない｡

64
00:05:09,020 --> 00:05:16,610
‫さて､ これまでのビデオで見てきたように､ リターンを1行にするのが良いのかどうか迷っている人もいるかもしれませんね｡

65
00:05:16,610 --> 00:05:23,960
‫そして､ アンリアル・エンジン､ ベスト・プログラミング・プラクティス､ 推奨品について話し合う良い機会です｡

66
00:05:23,990 --> 00:05:33,080
‫Unreal Engine のコーディング手法では､ 1 つのステートメントであっても､ すべての if ステートメントに中括弧とボディを付けることが推奨されています｡

67
00:05:33,080 --> 00:05:40,190
‫そして､ ここに複数行のコードを追加する予定なら､ すでに本体があるからです｡

68
00:05:40,190 --> 00:05:41,690
‫そして､ より鮮明になったのも事実です｡

69
00:05:41,690 --> 00:05:46,160
‫そして､ もうひとつのポイントは､ 私が使っている「オート」のことです｡

70
00:05:46,190 --> 00:05:53,720
‫ここでは射影機クラスで何度かautoを使いましたが､ これは効率的ではあるものの､

71
00:05:53,720 --> 00:06:04,220
‫一見して何の型かわからないため､ アンリアルエンジンのコーディング実務ではautoの使用も推奨されません｡

72
00:06:04,220 --> 00:06:11,570
‫Unreal Engine が推奨するコーディング手法に従うのであれば､ これらの auto のインスタンスを実際の型に置き換えることができます｡

73
00:06:11,570 --> 00:06:20,990
‫例えば､ ここでは､ get instigator controllerはAコントローラを返すので､ これをコントローラに変更し､ ポインタにすることができます｡

74
00:06:20,990 --> 00:06:29,210
‫このyou damage type static classはUクラスを返すのでyou classを使うことができます｡

75
00:06:29,210 --> 00:06:37,940
‫もちろんget owner up hereはa actorを返すのでactorを使うことができます｡ このコードを見てみると､

76
00:06:37,940 --> 00:06:48,740
‫これらのタイプが何であるかはもっと明白です｡ 一方､ autoはすべてを隠してしまい､ タイプを入力せずに済ませることができます｡

77
00:06:48,740 --> 00:06:55,790
‫今は､ 大きな式が何を返すかわからないことがあるので､ autoを使ってその型を確認し､

78
00:06:55,790 --> 00:07:00,410
‫後で実際の型に置き換えることがあります｡

79
00:07:00,410 --> 00:07:08,540
‫つまり､ このような長くて複雑な式が返す型を覚えるのにも､ autoは使えるのです｡

80
00:07:08,540 --> 00:07:15,350
‫そこで､ 磨き上げの段階なので､ ここではprojectileのautoを実際の型名に置き換えてみることにします｡

81
00:07:15,380 --> 00:07:25,940
‫また､ fire関数でbase pawnに入り､ この発射体があり､ これはこの大きな長い式から返されます｡

82
00:07:25,940 --> 00:07:34,550
‫Spawnアクターはこの場合､ 射的を返すので､ これを射的で置き換えることができます｡

83
00:07:35,640 --> 00:07:36,150
‫なるほど｡

84
00:07:36,150 --> 00:07:39,840
‫これでC++側のコードに磨きがかかるわけですね｡

85
00:07:39,840 --> 00:07:41,850
‫では､ これをコンパイルしてみましょう｡

86
00:07:41,850 --> 00:07:47,910
‫そしてコンパイルが成功したら､ エディタに戻って再生ボタンを押し､ 私たちが死んだ後､

87
00:07:47,910 --> 00:07:52,890
‫あの塔が私たちを撃ってこないことを確認しましょう｡

88
00:07:52,890 --> 00:07:54,180
‫だから､ 一発勝負なんです｡

89
00:07:55,050 --> 00:08:00,270
‫もう一匹いて､ 待ってるんだけど､ もう弾がないんだよね｡

90
00:08:00,300 --> 00:08:01,230
‫完璧です｡

91
00:08:01,260 --> 00:08:01,680
‫なるほど｡

92
00:08:01,680 --> 00:08:07,500
‫では､ 最後に投射物のスポーンポイントについて説明します｡

93
00:08:07,530 --> 00:08:15,120
‫では､ BP Pond Tankでこれを選択し､ バレルから十分な間隔があることを確認しましょう｡

94
00:08:15,150 --> 00:08:21,240
‫その前に､ 本当に､ 本当に近いところに置いて､ 起こりうる問題をお見せします｡

95
00:08:21,270 --> 00:08:27,570
‫さて､ 前進してマウスの左ボタンをクリックすると､ 弾が見えないのがわかると思います｡

96
00:08:27,570 --> 00:08:31,530
‫実際､ 近すぎて全然見えません｡

97
00:08:31,530 --> 00:08:33,100
‫すでに衝突が起きている

98
00:08:33,120 --> 00:08:35,970
‫何もしないうちに破壊されている｡

99
00:08:35,970 --> 00:08:39,810
‫だから､ バレルからしっかり離すこと｡

100
00:08:39,840 --> 00:08:45,960
‫どうせなら煙もスポーンして､ 煙の跡が後ろに続いているように見せたいものです｡

101
00:08:45,960 --> 00:08:48,450
‫だから､ これでもかなりリアルに見えるはずです｡

102
00:08:49,970 --> 00:08:51,250
‫ということは､ かなり良さそうですね｡

103
00:08:51,260 --> 00:09:01,010
‫また､ 弾丸のスポーンポイントについてですが､ BP pondのタレットを見て､ その弾丸のスポーンポイントを選択するといいかもしれません｡

104
00:09:01,010 --> 00:09:05,270
‫また､ タレットから投射される弾丸に問題がある場合は､

105
00:09:05,270 --> 00:09:10,570
‫タレットの砲身からも十分な距離を取るようにするとよいでしょう｡

106
00:09:10,580 --> 00:09:11,810
‫そこで

107
00:09:11,810 --> 00:09:15,980
‫機能的なゲームもあり､ 素晴らしい出来栄えです｡

108
00:09:15,980 --> 00:09:22,760
‫世界の中を転げ回り､ 弾丸を発射し､ それらが物を吹き飛ばすという能力を持っています｡

109
00:09:22,760 --> 00:09:25,190
‫タワーにぶつかれば､ 破壊できる｡

110
00:09:25,190 --> 00:09:28,430
‫タワーが当たれば､ 破壊されることもある｡

111
00:09:29,380 --> 00:09:30,700
‫ただ､ それだけなんです｡

112
00:09:30,700 --> 00:09:40,330
‫そして､ 勝ち負けの条件をHUDウィジェットで画面に表示し､ ゲームの勝ち負けを教えてくれるようになっているんです｡

113
00:09:40,330 --> 00:09:42,610
‫だから､ これは素晴らしいことです｡

114
00:09:42,610 --> 00:09:48,670
‫このゲームをパッケージ化したい場合は､

115
00:09:48,670 --> 00:10:00,670
‫一番上にあるプラットフォームのアイコンをクリックすれば簡単にできます｡

116
00:10:00,670 --> 00:10:08,980
‫他のプラットフォーム用にパッケージを作成したい場合は､ オンラインで各プラットフォームとそのパッケージの作成方法について調べることをお勧めします｡

117
00:10:08,980 --> 00:10:14,920
‫私はWindowsマシンを使っているので､ ここでpackage project for Windowsをクリックすれば､

118
00:10:14,920 --> 00:10:17,410
‫ゲームのパッケージをどこにするか尋ねられます｡

119
00:10:17,410 --> 00:10:19,780
‫今､ 私はこのTune Tanksでプロジェクトを行っています｡

120
00:10:19,780 --> 00:10:24,670
‫右クリックして､ 新しいフォルダを作成し､ このビルドと呼ぶことにします｡

121
00:10:24,670 --> 00:10:29,110
‫これは一般的に､ パッケージ化されたプロジェクトを置く場所です｡

122
00:10:29,110 --> 00:10:34,720
‫そこで､ そのフォルダを選択して､ Unreal Engine が私のゲームをパッケージングするのを許可します｡

123
00:10:34,720 --> 00:10:40,300
‫おそらく数分かかると思いますが､ それが終われば､ パッケージのゲームができるはずです｡

124
00:10:41,080 --> 00:10:41,530
‫なるほど｡

125
00:10:41,530 --> 00:10:51,970
‫パッケージングが完了したら､ 出力ログにビルドが成功したと表示されるはずです｡ そして､ パッケージングされたプロジェクト用に指定したフォルダを見ることができます｡

126
00:10:51,970 --> 00:10:54,670
‫私の場合は､ このビルドフォルダになります｡

127
00:10:54,700 --> 00:11:02,220
‫4つのウィンドウをパッケージ化したので､ Windowsフォルダがあり､ ここに私のチューンタンク､ ドットxyがあります｡

128
00:11:02,230 --> 00:11:03,490
‫実行ファイルです｡

129
00:11:03,520 --> 00:11:08,440
‫ダブルクリックすれば､ ここに私の最終プロジェクトがあります｡

130
00:11:08,440 --> 00:11:09,490
‫撮影はできる｡

131
00:11:09,580 --> 00:11:11,260
‫かわすことができる｡

132
00:11:11,990 --> 00:11:18,110
‫敵のタワーが撃ってきて､ それを破壊することができるようです｡

133
00:11:18,110 --> 00:11:19,550
‫そう､ 破壊できるのです｡

134
00:11:19,550 --> 00:11:23,240
‫潰されることもあるみたいだし､ ゲームに負けることもある｡

135
00:11:23,360 --> 00:11:26,990
‫もちろん､ もう少し腕が良ければ､ ゲームに勝てるかもしれませんしね｡

136
00:11:27,170 --> 00:11:33,230
‫そして､ 最後の課題として､ ゲームに自分なりの味付けをすることを求めます｡

137
00:11:33,230 --> 00:11:35,420
‫このゲームをあなた自身のものにする｡

138
00:11:35,420 --> 00:11:42,200
‫新しいサウンドやエフェクト､ メッシュを見つけて､ ファンキーな外観の塔や戦車を作ろう｡

139
00:11:42,200 --> 00:11:49,580
‫タワーの数を増やしたり､ スキルレベルを変えたり､ レベルが上がるにつれてタワーをどんどん難しくしたり｡

140
00:11:49,580 --> 00:11:56,480
‫戦車のレベルを上げて､ タワーをどんどん破壊していくことでレベルが上がるようにするとか｡

141
00:11:56,480 --> 00:12:05,330
‫新しいレベル形状を追加して､ 戦車にスロープを登らせたり､ 到達しにくい場所にある戦車を破壊しようとしたりできるかもしれません｡

142
00:12:05,360 --> 00:12:09,050
‫可能性は無限大ですが､ 何より大切なのは「楽しむ」こと｡

143
00:12:09,050 --> 00:12:10,700
‫ゲームを開発しながら

144
00:12:10,700 --> 00:12:13,160
‫このチャレンジでは､ ビデオを一時停止することはありません｡

145
00:12:13,160 --> 00:12:19,070
‫これは､ これからゲームのプロジェクトでできるようになることです｡

146
00:12:19,070 --> 00:12:20,630
‫だから､ おめでとうございます｡

147
00:12:20,630 --> 00:12:21,980
‫ゲームを終わらせた｡

148
00:12:21,980 --> 00:12:23,750
‫このセクションを楽しんでいただけたでしょうか？

149
00:12:23,750 --> 00:12:25,460
‫めちゃめちゃ楽しかったです｡

150
00:12:25,460 --> 00:12:28,790
‫これは素晴らしいゲームプロジェクトで､ あなたは長い道のりを歩んできたのです｡

151
00:12:28,790 --> 00:12:35,930
‫このセクションでたくさんのスキルを身につけたので､ もっとエキサイティングなことに挑戦してほしいです｡

152
00:12:35,930 --> 00:12:36,890
‫ありがとうございました｡

153
00:12:36,890 --> 00:12:39,770
‫私はスティーブンです｡

