‫ねえ｡
‫お帰りなさい｡
‫ゲームを完成させる準備はできています｡ つまり､ ゲームを磨き上げ､ 満足のいく状態にするために､
‫あと数項目が残っているだけです｡
‫だから､ このゲームを仕上げる準備をするんだ｡
‫あと少しで完成です｡
‫いくつかの機能を追加するだけです｡
‫カメラの動きをもう少し滑らかにしたいので､ まずはそこから｡
‫また､ 戦車が死んだ後もタワーが投射物を発射していることに気づいたので､ それを防ぐためにコードを簡単に修正することができます｡
‫それと､ 投射物のスポーンポイントの潜在的な問題を訪ねます｡
‫だから､ このゲームに飛び込んで磨きをかけよう｡
‫さて､ まず最初に見ておきたいのは､ カメラの動きです｡
‫では､ 再生ボタンを押すと､ その様子をお見せします｡
‫私が移動すると､ カメラが私たちの動きにぴったりとついてくるのがわかると思います｡ 私たちがターンしたり､
‫前進したり後退したりすると､ カメラも自動的についてきます｡
‫さて､ このカメラにちょっとだけスムーズな操作を加えることができる素敵なトリックがあります｡
‫それでは､ BP池の水槽を開けてみましょう｡
‫ここでBP Pond Tankで､ スプリングアームの部品を選択することにします｡
‫カメララグで検索すると､ このラグセクションに､ カメララグを有効にする､ というチェックボックスがありますね｡
‫それを確認して､ カメラ回転のラグを有効にします｡
‫それも確認するつもりです｡
‫これにより､ カメラが遅れてもスムーズに追いつくことができ､ プロフェッショナルなカメラのような効果を得ることができます｡
‫さっそく再生ボタンを押して､ テストしてみましょう｡
‫だから､ 私が動くと､ カメラは短い時間で私たちの動きに追いついてきます｡
‫そして､ 回転しているときも同じです｡
‫つまり､ ちょっとした慣性があり､ カメラがある種の滑走路の上にいて､ ゆっくりと停止するような感じなのです｡
‫次に､ スプリングアームを選択し､ カメララグスピードと回転ラグスピードを変更することができます｡
‫では､ 例えばこれを10ではなく5と5のように小さな値で配置すると､ どのように見えるか見てみましょう｡
‫それで動いているのですが､ カメラに少しラグがあるのがわかると思います｡
‫あとは､ これを自由に増やしたり減らしたりすればいいのです｡
‫これは試してみて､ 自分に合った値を見つけることができるものです｡
‫ここでは2という値になっていますが､ 私にとってはちょっとラグが大きすぎるんです｡
‫だから､ 5と2の間くらいがちょうどいいと思うんです｡
‫こういう価値が好きなら､ 2か､ それ以下にしておくといいかもしれませんね｡
‫でも､ これを例えば､ カメラのタイムラグ速度が4､ カメラの回転ラグ速度が4という値にしています｡
‫その様子を見てみましょう｡
‫だから､ 私が動くと､ カメラが遅れてしまう｡
‫明らかにカメララグがありますが､ それほどでもないです｡
‫これは実際にかなりいい感じだと思うので､ かなり満足しています｡
‫次の項目は､ 戦車がすでに死んでしまった後の塔の発砲です｡
‫では､ さっそくご紹介しましょう｡
‫これでよしとしよう｡
‫戦車は死にましたが､ 塔はまだ撃っています｡
‫さて､ これはタンクがまだ存在しているからです｡
‫そして､ 射程内にある限り､ タワーは発射され続けるのです｡
‫これは､ 水槽が死んだかどうかをチェックする変数のようなものを用意すれば簡単に処理できます｡
‫そこで､ このタンククラスとタンク､ そしてタンクがまだ生きているかどうかをチェックできるブール変数を追加します｡
‫そして､ クラスの外からアクセスする予定なので､ これを公開することにします｡
‫そこで､ これをBe Aliveというブル変数にして､ デフォルトでtrueに等しい値を設定することにします｡
‫つまり､ タンクは最初aliveの状態で始まり､ タンクが死ぬとaliveがfalseに設定されるのです｡
‫そしてそれは､ ハンドル破壊におけるタンクCPでも起こりうることです｡
‫では､ ここでハンドル破壊に踏み切ろう｡
‫そして､ これらの他のプロパティを設定した後､ B aliveをfalseに等しく設定するつもりです｡
‫つまり､ B aliveにfalseをセットしているので､ 戦車が死んだかどうかを知ることができ､ このブール値をチェックすることで単純に弾を発射しないようにすることができるのです｡
‫それでは､ タワードットとCP､ そしてここのチェックファイヤーコンディションに入りましょう｡
‫戦車が生きていることを確認してから発射すればいい｡
‫そこでまず､ タンクが有効かどうかを確認します｡
‫tankがnull pointerと等しいなら､ 単純にearlyを返すと言うことにしています｡
‫そうすれば､ Tankが有効であることがわかります｡ それから､ 射撃範囲内にいるかどうかを確認するために､
‫andを追加してTankが生きているかどうかを確認するつもりです｡
‫タンクなら｡
‫生きているならば､ 発射できる｡
‫タンクが生きていなければ､ 発砲しない｡
‫さて､ これまでのビデオで見てきたように､ リターンを1行にするのが良いのかどうか迷っている人もいるかもしれませんね｡
‫そして､ アンリアル・エンジン､ ベスト・プログラミング・プラクティス､ 推奨品について話し合う良い機会です｡
‫Unreal Engine のコーディング手法では､ 1 つのステートメントであっても､ すべての if ステートメントに中括弧とボディを付けることが推奨されています｡
‫そして､ ここに複数行のコードを追加する予定なら､ すでに本体があるからです｡
‫そして､ より鮮明になったのも事実です｡
‫そして､ もうひとつのポイントは､ 私が使っている「オート」のことです｡
‫ここでは射影機クラスで何度かautoを使いましたが､ これは効率的ではあるものの､
‫一見して何の型かわからないため､ アンリアルエンジンのコーディング実務ではautoの使用も推奨されません｡
‫Unreal Engine が推奨するコーディング手法に従うのであれば､ これらの auto のインスタンスを実際の型に置き換えることができます｡
‫例えば､ ここでは､ get instigator controllerはAコントローラを返すので､ これをコントローラに変更し､ ポインタにすることができます｡
‫このyou damage type static classはUクラスを返すのでyou classを使うことができます｡
‫もちろんget owner up hereはa actorを返すのでactorを使うことができます｡ このコードを見てみると､
‫これらのタイプが何であるかはもっと明白です｡ 一方､ autoはすべてを隠してしまい､ タイプを入力せずに済ませることができます｡
‫今は､ 大きな式が何を返すかわからないことがあるので､ autoを使ってその型を確認し､
‫後で実際の型に置き換えることがあります｡
‫つまり､ このような長くて複雑な式が返す型を覚えるのにも､ autoは使えるのです｡
‫そこで､ 磨き上げの段階なので､ ここではprojectileのautoを実際の型名に置き換えてみることにします｡
‫また､ fire関数でbase pawnに入り､ この発射体があり､ これはこの大きな長い式から返されます｡
‫Spawnアクターはこの場合､ 射的を返すので､ これを射的で置き換えることができます｡
‫なるほど｡
‫これでC++側のコードに磨きがかかるわけですね｡
‫では､ これをコンパイルしてみましょう｡
‫そしてコンパイルが成功したら､ エディタに戻って再生ボタンを押し､ 私たちが死んだ後､
‫あの塔が私たちを撃ってこないことを確認しましょう｡
‫だから､ 一発勝負なんです｡
‫もう一匹いて､ 待ってるんだけど､ もう弾がないんだよね｡
‫完璧です｡
‫なるほど｡
‫では､ 最後に投射物のスポーンポイントについて説明します｡
‫では､ BP Pond Tankでこれを選択し､ バレルから十分な間隔があることを確認しましょう｡
‫その前に､ 本当に､ 本当に近いところに置いて､ 起こりうる問題をお見せします｡
‫さて､ 前進してマウスの左ボタンをクリックすると､ 弾が見えないのがわかると思います｡
‫実際､ 近すぎて全然見えません｡
‫すでに衝突が起きている
‫何もしないうちに破壊されている｡
‫だから､ バレルからしっかり離すこと｡
‫どうせなら煙もスポーンして､ 煙の跡が後ろに続いているように見せたいものです｡
‫だから､ これでもかなりリアルに見えるはずです｡
‫ということは､ かなり良さそうですね｡
‫また､ 弾丸のスポーンポイントについてですが､ BP pondのタレットを見て､ その弾丸のスポーンポイントを選択するといいかもしれません｡
‫また､ タレットから投射される弾丸に問題がある場合は､
‫タレットの砲身からも十分な距離を取るようにするとよいでしょう｡
‫そこで
‫機能的なゲームもあり､ 素晴らしい出来栄えです｡
‫世界の中を転げ回り､ 弾丸を発射し､ それらが物を吹き飛ばすという能力を持っています｡
‫タワーにぶつかれば､ 破壊できる｡
‫タワーが当たれば､ 破壊されることもある｡
‫ただ､ それだけなんです｡
‫そして､ 勝ち負けの条件をHUDウィジェットで画面に表示し､ ゲームの勝ち負けを教えてくれるようになっているんです｡
‫だから､ これは素晴らしいことです｡
‫このゲームをパッケージ化したい場合は､
‫一番上にあるプラットフォームのアイコンをクリックすれば簡単にできます｡
‫他のプラットフォーム用にパッケージを作成したい場合は､ オンラインで各プラットフォームとそのパッケージの作成方法について調べることをお勧めします｡
‫私はWindowsマシンを使っているので､ ここでpackage project for Windowsをクリックすれば､
‫ゲームのパッケージをどこにするか尋ねられます｡
‫今､ 私はこのTune Tanksでプロジェクトを行っています｡
‫右クリックして､ 新しいフォルダを作成し､ このビルドと呼ぶことにします｡
‫これは一般的に､ パッケージ化されたプロジェクトを置く場所です｡
‫そこで､ そのフォルダを選択して､ Unreal Engine が私のゲームをパッケージングするのを許可します｡
‫おそらく数分かかると思いますが､ それが終われば､ パッケージのゲームができるはずです｡
‫なるほど｡
‫パッケージングが完了したら､ 出力ログにビルドが成功したと表示されるはずです｡ そして､ パッケージングされたプロジェクト用に指定したフォルダを見ることができます｡
‫私の場合は､ このビルドフォルダになります｡
‫4つのウィンドウをパッケージ化したので､ Windowsフォルダがあり､ ここに私のチューンタンク､ ドットxyがあります｡
‫実行ファイルです｡
‫ダブルクリックすれば､ ここに私の最終プロジェクトがあります｡
‫撮影はできる｡
‫かわすことができる｡
‫敵のタワーが撃ってきて､ それを破壊することができるようです｡
‫そう､ 破壊できるのです｡
‫潰されることもあるみたいだし､ ゲームに負けることもある｡
‫もちろん､ もう少し腕が良ければ､ ゲームに勝てるかもしれませんしね｡
‫そして､ 最後の課題として､ ゲームに自分なりの味付けをすることを求めます｡
‫このゲームをあなた自身のものにする｡
‫新しいサウンドやエフェクト､ メッシュを見つけて､ ファンキーな外観の塔や戦車を作ろう｡
‫タワーの数を増やしたり､ スキルレベルを変えたり､ レベルが上がるにつれてタワーをどんどん難しくしたり｡
‫戦車のレベルを上げて､ タワーをどんどん破壊していくことでレベルが上がるようにするとか｡
‫新しいレベル形状を追加して､ 戦車にスロープを登らせたり､ 到達しにくい場所にある戦車を破壊しようとしたりできるかもしれません｡
‫可能性は無限大ですが､ 何より大切なのは「楽しむ」こと｡
‫ゲームを開発しながら
‫このチャレンジでは､ ビデオを一時停止することはありません｡
‫これは､ これからゲームのプロジェクトでできるようになることです｡
‫だから､ おめでとうございます｡
‫ゲームを終わらせた｡
‫このセクションを楽しんでいただけたでしょうか？
‫めちゃめちゃ楽しかったです｡
‫これは素晴らしいゲームプロジェクトで､ あなたは長い道のりを歩んできたのです｡
‫このセクションでたくさんのスキルを身につけたので､ もっとエキサイティングなことに挑戦してほしいです｡
‫ありがとうございました｡
‫私はスティーブンです｡