目次
はじめに
注意
UE5Preview2の現在の情報です。
今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。
今回はメッシュに適応されているマテリアルをゲーム中に変更するやり方を紹介します。応用がしやすく表現の幅が広がるのでぜひ挑戦してみましょう!
解説
①弾道予測システムの修正
マテリアルの説明に入る前に弾道予測線の表示問題に関して修正しておきます。
画像のようにエリア外になっても弾道予測線が出っぱなしになっているので修正します。
BP_Cannonを開きます。
弾道の削除とポイントのクリアをコピーします。(範囲選択Ctrl+c)
弾道予測生成の下あたりに貼り付けます。
SplineMeshsが存在するかをチェックするノードを挟んで接続します。
これで範囲外では予測線が非表示になりました。
②マテリアルを切り替える
複数のマテリアルを用意して、メッシュに対して付け替える手法です。
全く異なったマテリアルを適応するときに便利です。
<マテリアルの作成>
前回の記事で初めに作成したマテリアルを別名で新規作成します。
名前はM_TargetingLine_Simpleとしておきます。
*前回の記事のコピペ*
マテリアル設定からUnlitにします。
また、このマテリアルはスプラインメッシュで使用できるようにするため
Used with Spline Meshesにチェックを入れます。3+クリックでカラーノードを出し、
パラメーターに変換しておきましょう。
保存を忘れずに!
マテリアルインスタンスを作成
名前はMI_TargetingLine
前回作成したものと2種類用意できたら準備完了です。
<マテリアル適応ノードの追加>
発射可能ならMI_TargetingLine
発射不可能ならMI_TargetingLine_Simpleと切り替えるようにします。
BP_Cannonに移動します。
生成されたコンポーネントの調整に移動してSetMaterialを追加します。
SetMaterial
任意のメッシュのマテリアルを変更するノード
Indexはマテリアルのエレメントのこと。
<マテリアルの変数化>
SetMaterialのMaterialを右クリックして変数へ昇格します。
名前はSplineMeshMaterialにしましょう。
コンパイル後デフォルト値にSImpleのほうを割り当てておきます。
<変数のセット>
範囲内かつ射撃可能かどうかは射角チェックで判定してるのでここに移動します。
ブランチノードの後に変数のセットを挟みます。
上は無印
下はSimpleを割り当てておきます。
実行してみましょう。
射角が足りていないときは赤いマテリアル
射撃時は黄色のマテリアルに変更されました。
③マテリアルの値を変更
パラメーター化したマテリアルを動的に変更するにはこちらを使用します。
色のグラデーション遷移など補完を行いたい場合はこちらを使用するといいでしょう。
この例ではMI_Distanceの色を動的に変更してみます。
<DynamicMaterialInstanceの作成>
動的にマテリアルの値を変更するにはDynamicMaterialInstanceという機能を使います。
BP_Cannonに移動して実装していきましょう。
イベントBeginPlayの末端です。
MaxDistanceMeshに接続します。
SourceMaterialにMI_Distanceを割り当てておきましょう。
ReturnValueを変数化します。
名前はDMI_DistanceMaterialに変更します。
<パラメーターの変更>
範囲チェックに移動します。
既存のノードにSetVectorParameterValueを挟み込みます。
このノードは指定した変数名のcolorを設定するノードです。
変更したいのはEmissiveColorという名前なのでコピペしてあげましょう。
Valueの値を設定します。
実行すると範囲内外で色が変わります。
<+α>
これだとあまりDynamicMaterialInstanceを使ったうまみがないので少し改造します。
2色が徐々に切り替わるようにしたいと思います。
ブランチノードの前にノードを入れ替えます。
そしてこねくり回しします。
コメントを入れておきましたが簡単に解説すると
範囲チェックの判定からfloat型で0から1の補間を行い、その値をカラーの補間のAlphaに使用することでスムーズな色の遷移を行っています。
これをマテリアルの切替で行う場合数十個のマテリアルを用意しなければならないためDynamicMaterialInstanceのうまみを生かせていると思います。
最後に
UE4やUE5向けの記事を書いています。
皆様の応援が投稿のモチベーションになりますので
コメントやTwitterのフォローなどしていただけるとありがたいです。
それではよきゲーム開発を。