『Unreal Engine 4 で極めるゲーム開発』の内容をUnreal Engine 5でラーニングする際のTips【第20章~第27章】
この記事について
この記事は前回の記事からの続きとなりますので、併せてご確認ください
<第21章>ライントレースを使う
影響度:小
『P371 <第21章> 21.3.5節 手順6.』
UE5では[Math]クラスがかなり整理されており、[Vector] ⇒ [Vector * Float]が無くなっている
こちらは[ユーティリティ] ⇒ [オペレータ] ⇒ [乗算する]で乗算ノードを出して、X成分とY成分の両方に300を掛けてあげれば、Xに向いてもYに向いても300の長さをもったベクトルを作ることができる
<第21章>トレースヒット情報を活用する
影響度:小
『P372 <第21章> 21.3.6節 手順3.』
UE5特有の問題なのかは分からないが、書籍の手順通りにノードネットワークを組むと、実行後に下記のエラーがいくつも表示されることだろう
ブループリントランタイム エラー:"プロパティ CallFunc_BreakHitResult_HitActor の読み取りを試行するためのアクセスはありません"。 ノード: ブランチ グラフ: EventGraph 関数: Execute Ubergraph PNPawn Rabbit ブループリント: PNPawn_Rabbit
これは、[LineTrace]ノードから出力されている[HitResult]構造体の中の[HitActor]変数が空のまま、[Tick]ノードで毎フレーム呼ばれていることが原因である
よって、[HitActor]が空の場合は先の処理に進まないようにすれば良いため、[BreakHitResult]ノードと[ActorHasTag]の間に[isValid]ノードを挟めばこのエラーは出現しなくなる
なお、当問題の解決にあたっては下記の記事を参考にさせていただいた
<第24章>すべてのアニメーションシーケンスをインポートする
影響度:中
『P428 <第24章> 24.2.2節 手順5.』
ninjaのアニメーションアセットをインポートする際、書籍の手順通りに進めると、『ninja_walk01.fbx』および、『Ninja_Idle_BS.fbx』でエラーになる
詳しいエラーの内容は下記
2つとも同じようなエラーでインポートに失敗するものの、少し対処方法が違うため、まず『ninja_walk01.fbx』からインポートを行う
『ninja_walk01.fbx』の場合は、[FBXインポートオプション]で、[Animation] ⇒ [Animation Length]を[Animated Time]に変更してインポートを行えばインポートすることができる
『Ninja_Idle_BS.fbx』をインポートする際は、[FBXインポートオプション]で次の設定を変更する必要がある
[Animation] ⇒ [Animation Length]を[Animated Time]に変更
[詳細設定] ⇒ [Custom Sample Rate]を[40]に変更
<第24章>1次元のブレンドスペースアセットの作成
影響度:小
『P445 <第24章> 24.5.1節 手順4.』
UE5では、ブレンドスペースアセットのアニメーションシーケンスグラフの設定の場所が変更されているようだ
ブレンドスペースエディタを開いたばかりの画面では下記の画像のようになっており、書籍の内容と相違している
これは単に、[アセット詳細]側に設定が移動されているだけの変更なので、[Axis Settings] ⇒ [水平軸]の項目から設定すれば良い
書籍で紹介されているところの[X軸ラベル]が[Name]、[X軸範囲]が[Minimum Axis Value]、[Maximum Axis Value]である
余談だが、『手順6』で「ブレンドスペースの真ん中あたりにマウスカーソルを運んでみると…」と記載されているが、UE5ではマウスカーソルを動かすだけではブレンドのプレビューができない
グラフの左上に書かれている通り、『Ctrl + マウスオーバー』の操作を行えば値のプレビューができる
<第25章>マテリアルエディタを体験する
影響度:小
『P457 <第25章> 25.2.1節 手順3.』
マテリアルエディタの左上に表示されているビューポートの、モデル形状を切り替えるボタンがUE5ではデザイン変更されており、微妙に分かりづらかくなっていた
<第25章>デフォルトのポストプロセスを使う
影響度:小
『P469 <第25章> 25.4.1節 手順7.』
UE5では[PostProcessVolume]のプロパティの内容が大きく変わっているようで、書籍の手順通り、「[Depth Of Field] ⇒ [Method]の左側にあるチェックボックスに…」と進められなくなっていた
が、これは[焦点距離]を設定すれば書籍の通りに進められるので、下記画像の通りに設定すればOKだ
<第25章>ポストプロセスマテリアルを自作する
影響度:大
『P470 <第25章> 25.4.2節 手順4.~』
UE5で書籍の手順通りに、[M_PP_Default]ノードの[エミッシブカラー]に[SceneTexture:SceneColor]ノードを接続すると、下記のようなエラーが表示されてしまう
[SM5] (Node SceneTexture) SceneColor lookups are only available when MaterialDomain = Surface. PostProcessMaterials should use the SceneTexture PostProcessInput0.
[SM5] Only 'surface' material domain can use the scene color node.
詳しいことは筆者の知識では把握できていないが、UE5では[Post Process]のマテリアルドメインで[SceneTexture]ノードが生成する[SceneColor]ルックアップテクスチャが利用できなくなっていた
これを解消するためには、[SceneTexture]ノードが生成するルックアップテクスチャの種類をポストプロセス用のものにすればOKのようだ
この後の『手順7.』で作成したポストプロセスマテリアルを適用する作業があるが、ここもUE5では大きく変わっている
書籍には「[詳細]パネルで、[Misc] ⇒ [Blendables]の…」とあるが、UE5は[レンダリング機能]の中にズバリ、[ポストプロセスマテリアル]という項目が存在しているので、ここに[M_PP_Default]マテリアルを設定しよう
なお、UE5では[PostProcessVolume]とポストプロセスマテリアルの設定が同居できるようになっているようなので、[M_PP_Default]マテリアルを設定しても、先に設定したDoFは消えずに、[M_PP_Default]の設定とブレンドされるようになっているのだ
さらに各ポストプロセスマテリアルの掛かり具合も個別で設定できるようだ
<第25章>ミニチュア風ポストプロセスマテリアルに仕上げる
影響度:大
『P471 <第25章> 25.4.3節 手順8.~』
前節に続いて、こちらでもポストプロセスの扱いが変わったことによる影響を受けている
結論から言うと当項目については、書籍の通りに実装することは出来ていない
作成されたアルファグラデーションの合成の際、書籍では[SceneTexture:PostProcessInput0]と[SceneTexture:SceneColor]の情報をLerpで乗算しているが、UE5を用いる場合は[SceneTexture:SceneColor]の情報が取得できない
これの解決方法を色々調べてみたが分からず…
書籍のサンプル画像では、アルファのグラデーション部分が暗くなっており、さらにはアルファのグラデーション部分にのみDoFがかかっていたが、これをUE5で実現する方法が分からなかったので、調べて分かったことを纏めておく
分かったこと
[SceneTexture:PostProcessInput0]はポストプロセス込みの画面をそのまま出力する[SceneTexture ID]であること
[SceneTexture:PostProcessInput1~6]までは[Separate Translucency RGB]の情報が取得できること
ここで行き詰まってしまった筆者はとりあえず、本来[SceneTexture:SceneColor]ノードがある箇所を[SceneTexture:PostProcessInput0]にしておいた
また、このままでは白飛びが激しかったので、UE5から追加された[Local Exposure]を使った
<第26章>ノードをパラメータ化する
影響度:小
『P479 <第26章> 26.1.2節 手順3.』
UE5では、グループ名を表すプロパティの位置が変更になっており、[一般]カテゴリから[マテリアルエクスプレッション]カテゴリに移動されていた
<第26章>ペイント機能をシンプルに使う
影響度:小
『P487 <第26章> 26.3.1節 手順8.~』
第6章で発生していた『モード』パネルが無い問題がここでも発生しているが、こちらも第6章と同じように解決できる
レベルエディタの左上にある[選択モード]のプルダウンを開き、[メッシュペイント]を選択すればOKだ
[メッシュペイント]は使い方が書籍に記載のものと少し違うので、ここで解説しておく
[選択]モードでペイントしたいメッシュを選択できるようにする
ビューポートやアウトライナーでペイントしたいメッシュを選択する
[ペイント]モードに切り替え
[ペイント]モードでは、主に[ブラシ]カテゴリの[Size]、[Strength]、[頂点ペイント]カテゴリの[Paint Color]を編集すれば書籍と同じようにVertex Paintを利用することができた
<第27章>初めてのパーティクルシステム
影響度:大
『P502 <第27章> 27.3節 手順1.~』
UE5では、UE4までに利用されていた[Cascade]パーティクルシステムから、[Niagara]パーティクルシステムに切り替えが行われた
その影響で、第27章の内容は本記事のみではカバーしきれないほどの変更が入っているため、本記事では書籍で解説されている[PS_GoalItem]に似せたパーティクルの作り方のみを解説する(少しくらい見た目が違くても作り方を覚えられれば良いため細かいことは気にしない)
[Niagara]パーティクルシステムの概念だけ理解できれば、下記で紹介する記事から読み替えて書籍の内容を実装できるものと思う
筆者が制作した[PS_GoalItem]パーティクルは下記のような見栄えになった
作り方の解説に入る
[コンテンツ > Particles]フォルダの中で右クリックを行い、[Niagaraシステム]を選択する
[選択したエミッタに基づく新しいシステム]を選択し、[Engine Provided]から[Empty]を[+]し、[終了]を選択
生成されたファイルに[PS_GoalItem]という名前を付けたら、ダブルクリックでNiagaraエディタを開く
まず、パーティクルの柄を星型に変更する工程を行う
ノードを把握しやすくするため、[システムの概要]ウィンドウに表示されている、橙色の[Empty]ノードをクリックし、F2キーで『Star』に名前を変更
ノード上部の『○』が表示されている箇所をクリックし、右側ウィンドウの[選択項目 > スプライトレンダリング > Material]からパーティクルの柄を[M_FX_Star01]に変更
次に、[エミッタの更新]にパラメータを追加する工程を行う
[Star]エミッタノードの[エミッタの更新]の横の[+]を押下し
[Spawn Rate]を追加
[選択項目 > Spawn Rate > SpawnRate]を[10]に設定
次に、エミッタがどういった要件でパーティクルをスポーンさせるかの設定を行う
[Star]エミッタノードの[選択項目 > Initialize Particle]の項目を以下に設定
[Point Attributes > Lifetime Mode]を[Random]に設定し
[Lifetime Min]を[0.5]
[Lifetime Max]を[1.0]
[Sprite Attributes > Sprite Size Mode]を[Random Uniform]に設定し
[Uniform Sprite Size Min]を[15]
[Uniform Sprite Size Max]を[50]
[Sprite Attributes > Sprite Rotation Mode]を[Random]に設定
[Star]エミッタノードの[パーティクルのスポーン]の横の[+]を押下し
[Shape Location]を追加
[選択項目 > Shape Location > Shape]の項目を設定
[Shape Primitive]を[Box / Plane]に設定
[Box / Plane Mode]を[Plane]に設定
[Plane Size]を[X : 60] [Y : 60]に設定
[Star]エミッタノードの[パーティクルのスポーン]に[Add Velocity]を追加
[選択項目 > Add Velocity]の項目を設定
[モジュールの依存関係が解決していません]と表示された場合、[Solve Forces And Velocity]を追加する方の[問題を修正]を選択
[Velocity]を[Z : 10]に設定
[Velocity Speed Scale]を[10]に設定
ここで完成としても良いが、一応、カラーの設定も追加しておく
[Star]エミッタノードの[パーティクル更新]に[Scale Color]を追加
[Solve Forces And Velocity]の上になるよう、ノード内に表示されているパラメータをドラッグする
また、さらに派手にしたい場合は[Sprite Rotation Rate]の追加もおすすめだ(書籍では回転アニメーションは設定していないが、ランダムな値の設定方法が分かりやすいので設定推奨)
[Star]エミッタノードの[パーティクル更新]に[Sprite Rotation Rate]を追加
[選択項目 > Sprite Rotation Rate]の項目を設定
[Rotation Rate]のパラメータの右側にある[▽]をクリック
値の種類を選べるので、[Random Range Float]を選択
[Minimum]を[360]
[Miximum]を[-360]
以上で[PS_GoalItem]パーティクルが完成となる
ビューポートに配置して調整などをしてみるのも良い
今回の記事はここまで。
筆者の仕事の都合で、28章と29章はまだ学べていないので別途記事にしようと思う。しばしお待ちいただきたい。