‫だから､ 弾が当たったらカメラが揺れるようにしたい､ みたいな｡
‫また､ 池のひとつが枯れても､ 一度振ってほしいと思っています｡
‫やあ､ お帰りなさい｡
‫このビデオでは､ カメラを揺らすという特殊な効果をゲームに追加していきます｡
‫投射物が何かにぶつかったときや､ 池が1つ枯れたときにカメラを揺らしたいですね｡
‫そうすることで､ もう一段階､ プロフェッショナルな仕上がりになるのです｡
‫では､ さっそく潜入してみましょう｡
‫ここでは､ エディタ内にある､ 手ぶれ用の新しいクラスを追加したいと思います｡
‫Unreal Engineには､ カメラを揺らすためのクラスが組み込まれています｡
‫ここで､ blueprints フォルダに新しいフォルダを作成し､ これを camera shake と呼ぶことにします｡
‫そして､ 手ブレフォルダ内｡
‫右クリックして､ 新しいブループリントを作成するんだ｡
‫ブループリントを作る理由は､ 手ぶれには調整すべき変数がたくさんあるので､
‫ブループリント側から作る方がずっと簡単だからです｡ 探しているクラスはマチネーカメラブレなので､
‫カメラブレを検索して選択できます｡
‫マチネの手ぶれ｡
‫選択」をクリックし､ これを最初の手ぶれと呼ぶことにします｡
‫BPヒット手振れ｡
‫この新しいブループリントをダブルクリックして開いてみると､ さまざまな変数を選択できる詳細パネルがあることがわかります｡
‫そして､ この手振れクラスに存在するいくつかのパラメータについて説明します｡
‫さて､ ここにはかなりの数がありますが､ ここでは手ブレの全体的なフィーリングに影響する2つについてだけ触れます｡
‫さて､ 発振という項目があるのがお分かりになると思います｡
‫そして､ この部分がオシレーションと呼ばれているのは､ 手ブレはカメラを振動させることになるからです｡
‫さて､ 正弦波のWikipediaのページはこちらです｡
‫正弦波は数学的な関数であり､ 正弦波の背後にある数学を理解する必要はないのです｡
‫しかし､ 正弦波がどのようなものかを確認するのに役立ちます｡
‫右側にスクロールすると､ この赤い波が見えますが､ これはサイン波と書かれています｡
‫つまり､ 上がったり下がったり､ 行ったり来たりする｡
‫ですから､ カメラが前後に滑らかに揺さぶられることを「振動している」と言います｡
‫ここで､ 発振時間､ ブレンドインタイム､ ブレンドアウトタイムがあることがわかります｡
‫デュレーションは､ シェイクが持続する時間に影響します｡
‫しかし､ 私はすでにいくつかの実験を行い､ 手ブレを軽減するためのおおよその値を知っています｡
‫弾丸が何かにぶつかると､ 比較的短い持続時間になります｡
‫さて､ これは秒単位ですが､ 0を選びます｡ 2 この手ブレの時間､ およびブレンドインとブレンドアウトの時間は5秒です｡
‫0の値を使うことにしています｡ 05なので､ 0. ブレンド・イン・タイムで05､ 0. ブレンドアウトタイムの05
‫これは､ 手ブレをなじませるのにかかる時間であり､ 0まで続きます｡ 2 5秒
‫今､ 私たちはさまざまなタイプの振動を手に入れました｡
‫回転振動があり､ これがその振動関数に従ってカメラを回転させます｡
‫位置振動はカメラを空間内に移動させ､ 視野振動は視野に影響を与え､
‫基本的にカメラでズームインとズームアウトを行います｡
‫さて､ 回転振動と視野振動は､ 乗り物酔いを起こしやすいものです｡
‫だから､ 好きなようにそれらを実験することができます｡
‫でも､ 今回の手ブレは､ 位置の揺れを変えるだけです｡
‫さて､ X､ Y､ Zの3軸がありますが､ 正弦波が何かを前後に揺らすことは確認しました｡
‫この振動は､ カメラをX､ Y､ Z方向に前後に揺らすことになります｡
‫これらのドロップダウンをクリックして展開すると､ 各軸に振幅､ 周波数､ さらに初期オフセットと波形があることがわかります｡
‫ここで､ 手ブレの初期オフセットをランダムにしていますが､ これをランダムにしておくことで､ 手ブレを予測しにくくすることができます｡
‫そして､ 正弦波は､ カメラをジャークするときに使う波形の種類です｡
‫そして､ 上下の動きがスムーズであることも確認できました｡
‫ここでいう振幅とは､ その軸でカメラが動く最大量のことです｡
‫X､ Y､ Zの3つの振幅を10に設定し､ 周波数はカメラが振動する速さにします｡
‫これらも10に設定するつもりです｡
‫あとは､ 手ブレを実装すると同時に､ これがどのように見えるのかを確認することができます｡
‫その前に､ ポーンが死んだときのために､ もう1つ手ぶれを作っておこうと思います｡
‫そこで､ 右クリックして､ 新しいブループリント・クラスを作成し､ カメラブレを検索して､ マチネ・カメラブレを選択し､ selectをクリックすることにしましょう｡
‫そして､ これについては､ 「BP Depth Camera Shake」と呼ぶことにします｡
‫さて､ 死の手ぶれは､ 当たりの手ぶれより少し激しくなりそうです｡
‫手振れ補正は､ 弾丸が何かにぶつかるとカメラが揺れるというものです｡
‫でも､ デスカメラシェイクは､ 何かが死ぬとカメラが揺れちゃうんですよ｡
‫だから､ 発振時間については､ もう少し長くしようと思っているんです｡
‫4にするつもりです｡ 3､ 5秒と4､ ブレンドインタイムとアウトタイム｡
‫これを両方とも0にします｡ 1.
‫さて､ 余談ですが､ ブレンドインとアウトの時間です｡
‫フルタイムのパーセンテージは､ 0と1の間で正規化されているのでしょうか？
‫つまり､ 1点目は全発振時間の10%です｡
‫次に､ XとYの振幅を54に設定し､ Zの振幅をゼロのままにして､ カメラが死んだときにXとYにだけ動くようにします｡
‫こうすることで､ ちょっと変わった感じの手ブレになります｡
‫そして周波数は､ どちらも20に設定します｡
‫さて､ これで手ブレが発生したわけですが､ この手ブレを実際にC++側で再生する実装をしましょう｡
‫さて､ 手ブレを再生するためには､ いくつかの手ブレ変数が必要です｡
‫アンリアル・エンジンの古いバージョン､ アンリアル・エンジン4を使用している場合｡ 25以下は具体的には､ 変数のためのクラスがあなたになるのです｡
‫手ぶれ｡
‫しかし､ 新しいバージョンでは4. 2､ 6以上
‫そして､ これにはアンリアル・エンジン5も含まれています｡
‫マチネを使うんです｡
‫手ぶれ｡
‫ということで､ この動画ではそれを使っています｡
‫さて､ 手ブレを再生する機能も異なります｡
‫もし､ 4． 2､ 5以下なら､ 使う機能はクライアントプレイです｡
‫手ぶれ｡
‫そして､ これは4で登場したプレイヤー・コントローラー・クラスの関数です｡ 26歳以上､ 5歳を含む｡ 0を使用しています｡
‫クライアントスタートの手ブレをクライアントプレイにするんです｡
‫手ブレは非推奨になりました｡
‫今回はUnreal Engine 5を使用しているので､ クライアント､ スタートカメラブレを使用します｡
‫そして､ 5を使うなら､ それに倣ってクライアントスタート手ブレを使うということです｡
‫しかし､ 古いエンジンバージョン､ 具体的には4. 2､ 5､ 以下は左側のクラスと関数を使い､
‫それ以外は右側のクラスと関数を使う｡
‫ここで､ ドキュメントにある手ぶれ補正のベースと､ そのためのインクルードを紹介します｡
‫このカメラスラッシュの手ぶれ防止ベースをインクルードに使うわけですね｡
‫そこでまず､ 射影機クラスでヒット時の手ブレを処理したいと思います｡
‫そこで､ ここprojectileで､ 手ブレを追加してみます｡
‫さて､ これがフォワード宣言になります｡
‫Uを作ろうと思います｡
‫手ブレ補正ベース｡
‫ポインターなんです｡
‫そして､ これを設計図から設定したいので､ 今は手ブレのヒットと呼ぶことにします｡
‫せっかく手ブレの設計図があるのだから､ これを晒してみる｡
‫新しい財産になりそうです｡
‫どこでも編集できるようにして､ カテゴリーをつける｡
‫これについては､ 戦闘編にとどめておきます｡
‫これで手ブレを弾く準備が整いました｡
‫ということで､ 射出CPでは､ 他のアクターのチェックで､ ここのヒット時に配置することにします｡
‫そして､ まず最初にブループリントからカメラブレを設定したことを確認します｡ つまり､
‫ヒットカメラブレがヌルでないことを確認する必要があります｡
‫だから､ 手ブレを打てば､ 手ブレを起こせるんです｡
‫そして､ こちらはバージョン4のプレイヤーコントローラクライアントスタート手ブレです｡ 26歳以上
‫ここで､ 2つのことに注目してください｡
‫これらは変数のtwサブクラスを含むので､ 新しいクラスが必要です｡
‫ここで､ これらの変数のブループリントを作成しました｡ つまり､ ここでは通常の変数ではなく､ そのサブクラスを簡単に作成することができるのです｡
‫この手振れクラスはPTのサブクラスなので､
‫PT subclass ofとします｡
‫この宣言はそのままにして､ アスタリスクは必要ありません｡
‫この関数はプレイヤー・コントローラに属しますが､ Projectile CPではプレイヤー・コントローラ用の変数がありません｡
‫しかし､ U worldクラスに存在するget first player controllerという関数があるので､ get
‫worldを呼び出し､ get first player controllerを呼び出します｡
‫だから､ そうすることにしたんです｡
‫まず Git World を呼び出し､ そこから get first player
‫controller を呼び出します｡ get first player
‫controller からは､ client start camera shake
‫を呼び出すことができます｡
‫では､ これをコンパイルしてみましょう｡
‫それでは､ エディタに戻ってテストしてみましょう｡
‫さて､ ブループリントとPTサブクラスのofを作成しましたが､ そのPTサブクラスのofを設定する必要があります｡
‫では､ アクターとBPプロジェクタイルに入りましょう｡
‫ブループリント・エディタを開き､ 戦闘セクションに移動して､
‫ここにヒット・カメラ・シェイクのクラスとサブクラスがあります｡
‫では､ 再生ボタンを押してコンパイルし､ カメラが揺れるかどうか見てみましょう｡
‫そして､ そこにあるのは
‫すごい｡
‫そこで次は､ ポッドが死ぬときの手ブレを演じたいと思います｡
‫そこで､ バスポンドに入り､ ここに手ブレの変数を追加してみます｡
‫では､ この下の方にある､ もう一つのt変数のサブクラスを作ってみましょう｡
‫フォワード宣言します｡
‫これは手ブレベースと呼ばれるもので､ 私はこれを深度手ブレクラスと呼ぶことにします｡
‫そして､ 他のものと同じように､ これもUプロパティにするつもりです｡
‫Edit Anywhere Category combat と､ ここベースポンで手ぶれクラスができました｡
‫では､ ポーンが死んだときのデスカメラシェイクに挑戦します｡
‫つまり､ ......が死んだらやるわけで､ それはもちろんハンドル破壊でやるわけです｡
‫そこで､ この手ブレを再生するために､ この関数内の正しい位置を選択してから､ コードをコンパイルしてください｡
‫タンクとタワーの両方のブループリント・クラスにvalueのサブクラスを設定し､ テストします｡
‫映像を一時停止して､ デスカメラを実装する｡
‫今すぐ振ろう｡
‫なるほど｡
‫そこで､ デフ手ぶれ教室を開催しています｡
‫基地池CPに入ろう､ 破壊を処理するために上にスクロールする｡
‫そして､ まず最初に深度手振れクラスが設定されているかどうかを確認し､ 設定されていれば､
‫実際に手振れを再生することができます｡
‫ここでプレイヤーコントローラへのポインタを持っていないので､ ここからGet Worldを呼び出して､
‫最初のプレイヤーコントローラを取得し､ そこから呼び出すことにします｡
‫クライアントスタート手ブレ
‫そして､ ここでは､ 深度カメラ､ 手ぶれ補正のクラスで合格することができます｡
‫そして､ そこにあるのは
‫では､ これをコンパイルして､ エディタに戻って､ --のフォルダー､ BP -- tankを開いてみましょう｡
‫そして､ ここでは深度手ブレ教室を開催しています｡
‫これを死ぬほど設定する｡
‫カメラ､ 手ぶれ､ コンパイル､ 保存して終了｡
‫投影機も閉じようと思います｡
‫そしてBP池､ 砲台を開き､ ここでも深度カメラブレーククラスを深度カメラブレークに設定します｡
‫これで､ 死のテストができる｡
‫では､ その仕組みを見てみましょう｡
‫ケイ､ 私は塔のひとつに登って､ そして
‫ベーム
‫手ブレが効く｡
‫さて､ 最後のチェックポイントは､ 塔が死ぬときに手ブレが発生するかどうかです｡
‫では､ 先にタワーを1つ倒してしまいましょう｡
‫そして､ そこに行く｡
‫カメラを手ぶれさせました｡
‫すごい｡
‫まとめると､ 今はカメラを振っているということですね｡
‫投擲物が何かに当たったときと､ 池のひとつが死んだときに振っています｡
‫これは､ ゲームをよりプロフェッショナルに見せるための効果的なポリッシュアップの一つです｡
‫次回のビデオでは､ このセクションの締めくくりとして､ ゲームが完全に動作する状態にするために､
‫ゲームを磨き上げ､ 最終的な動作状態にします｡
‫また､ お会いしましょう｡