ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【ゼロからアンリアルエンジン5】 ⑰プレイヤーを狙う大砲を作ろう=マテリアルの値を変更&マテリアルを切り替える=

目次

 

はじめに

注意

UE5Preview2の現在の情報です。

今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。

今回はメッシュに適応されているマテリアルをゲーム中に変更するやり方を紹介します。応用がしやすく表現の幅が広がるのでぜひ挑戦してみましょう!

解説

①弾道予測システムの修正

マテリアルの説明に入る前に弾道予測線の表示問題に関して修正しておきます。

画像のようにエリア外になっても弾道予測線が出っぱなしになっているので修正します。

f:id:namiton:20220318100357p:plain

BP_Cannonを開きます。

弾道の削除とポイントのクリアをコピーします。(範囲選択Ctrl+c)

f:id:namiton:20220318102152p:plain

弾道予測生成の下あたりに貼り付けます。

f:id:namiton:20220318102240p:plain

SplineMeshsが存在するかをチェックするノードを挟んで接続します。

f:id:namiton:20220318102612p:plain

これで範囲外では予測線が非表示になりました。

f:id:namiton:20220318102657p:plain

 

②マテリアルを切り替える

複数のマテリアルを用意して、メッシュに対して付け替える手法です。

全く異なったマテリアルを適応するときに便利です。

f:id:namiton:20220318095843p:plain

<マテリアルの作成>

前回の記事で初めに作成したマテリアルを別名で新規作成します。

名前はM_TargetingLine_Simpleとしておきます。

f:id:namiton:20220317112904p:plain

 

*前回の記事のコピペ*

 

マテリアル設定からUnlitにします。

f:id:namiton:20220317112246p:plain

また、このマテリアルはスプラインメッシュで使用できるようにするため
Used with Spline Meshesにチェックを入れます。

f:id:namiton:20220317112330p:plain

3+クリックでカラーノードを出し、

パラメーターに変換しておきましょう。

保存を忘れずに!

f:id:namiton:20220317112527p:plain

マテリアルインスタンスを作成

名前はMI_TargetingLine

f:id:namiton:20220317112625p:plain

 

前回作成したものと2種類用意できたら準備完了です。

f:id:namiton:20220318095843p:plain

 

<マテリアル適応ノードの追加>

発射可能ならMI_TargetingLine

発射不可能ならMI_TargetingLine_Simpleと切り替えるようにします。

 

BP_Cannonに移動します。

生成されたコンポーネントの調整に移動してSetMaterialを追加します。

f:id:namiton:20220318103258p:plain

 

SetMaterial

任意のメッシュのマテリアルを変更するノード

Indexはマテリアルのエレメントのこと。

f:id:namiton:20220318103443p:plain

f:id:namiton:20220318103457p:plain

 

<マテリアルの変数化>

SetMaterialのMaterialを右クリックして変数へ昇格します。

f:id:namiton:20220318103621p:plain

名前はSplineMeshMaterialにしましょう。

f:id:namiton:20220318103814p:plain

コンパイル後デフォルト値にSImpleのほうを割り当てておきます。

f:id:namiton:20220318103924p:plain

 

<変数のセット>

範囲内かつ射撃可能かどうかは射角チェックで判定してるのでここに移動します。

f:id:namiton:20220318104047p:plain

ブランチノードの後に変数のセットを挟みます。

f:id:namiton:20220318104144p:plain

上は無印

下はSimpleを割り当てておきます。

f:id:namiton:20220318104238p:plain

実行してみましょう。

射角が足りていないときは赤いマテリアル

f:id:namiton:20220318104403p:plain

射撃時は黄色のマテリアルに変更されました。

f:id:namiton:20220318104630p:plain

 

③マテリアルの値を変更

パラメーター化したマテリアルを動的に変更するにはこちらを使用します。

色のグラデーション遷移など補完を行いたい場合はこちらを使用するといいでしょう。

 

この例ではMI_Distanceの色を動的に変更してみます。

f:id:namiton:20220318105206p:plain

 

<DynamicMaterialInstanceの作成>

動的にマテリアルの値を変更するにはDynamicMaterialInstanceという機能を使います。

BP_Cannonに移動して実装していきましょう。

 

イベントBeginPlayの末端です。

MaxDistanceMeshに接続します。

f:id:namiton:20220318105528p:plain

SourceMaterialにMI_Distanceを割り当てておきましょう。

f:id:namiton:20220318105813p:plain

ReturnValueを変数化します。

f:id:namiton:20220318105833p:plain

名前はDMI_DistanceMaterialに変更します。

f:id:namiton:20220318105903p:plain

 

<パラメーターの変更>

範囲チェックに移動します。

f:id:namiton:20220318110016p:plain

既存のノードにSetVectorParameterValueを挟み込みます。

このノードは指定した変数名のcolorを設定するノードです。

f:id:namiton:20220318110205p:plain

変更したいのはEmissiveColorという名前なのでコピペしてあげましょう。

f:id:namiton:20220318110332p:plain

f:id:namiton:20220318110411p:plain

Valueの値を設定します。

f:id:namiton:20220318110658p:plain

実行すると範囲内外で色が変わります。

f:id:namiton:20220318110728p:plain

f:id:namiton:20220318110738p:plain

<+α>

これだとあまりDynamicMaterialInstanceを使ったうまみがないので少し改造します。

2色が徐々に切り替わるようにしたいと思います。

ブランチノードの前にノードを入れ替えます。

f:id:namiton:20220318111107p:plain

そしてこねくり回しします。

コメントを入れておきましたが簡単に解説すると

範囲チェックの判定からfloat型で0から1の補間を行い、その値をカラーの補間のAlphaに使用することでスムーズな色の遷移を行っています。

 

これをマテリアルの切替で行う場合数十個のマテリアルを用意しなければならないためDynamicMaterialInstanceのうまみを生かせていると思います。

f:id:namiton:20220318111933p:plain

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。