UE4 マテリアルの色をランダムに変更する
最近、マテリアルの記事書いてないなぁ。
ってことで今回はマテリアルとブループリントを使用して
マテリアルの色をランダムに変更する処理を作成したいと思います。
実は過去記事で今回の処理と同じ処理が写ってたりします。
準備
まずはプロジェクトを作成しましょう。
今回はUE4 4.17.0を使用しています。
作成しました。
マテリアルを作成する
プロジェクトを作成できたら、
コンテンツブラウザを右クリック→Materialを選択し、
新しいマテリアルを作成しましょう。
適当な名前をつけておきます。
作成したマテリアルをダブルクリックで開き、
このようにノードを繋げます。
Vector ParameterをBase Colorにつなぐシンプルなものです。
Vector ParameterのParameter Nameは何でも良いのですが、
今回は分かりやすくBaseColorとします。
これでマテリアルは完成です。
ブループリントを作成する
次にマテリアルを適応するMeshを持つ、
ブループリントを作成します。
コンテンツブラウザを右クリック→Blueprint Classを選択します。
今回のParent ClassはActorにしました。
こちらもマテリアル同様、適当な名前をつけます。
作成したブループリントをダブルクリックで開き、
Add ComponentからSphereを選択します。
こんな感じになると思います。
このSphereのマテリアルを先程作成した、
M_Randomに変更しましょう。
処理を書いていきます。
Construction Scriptタブを開き、このようにノードを繋げます。
SphereメッシュのElement Index 0のマテリアルを
Dynamic Material Instanceとして変数に格納します。
※マテリアルが複数ある場合はFor Loopと配列で
全てのマテリアルを格納することも可能です。
次にイベントグラフタブを開き、
このようにノードを繋げます。
変数に格納したマテリアルの色をランダムに変更しています。
Set Vector Parameter ValueのParameter Nameには
マテリアルを作成したときにつけたVector Parameterの名前を入力してください。
Random Floatノードは0~1の値をランダムに返してくれるノードです。
もしEmissive Colorで1以上の値が欲しい場合には
Random Float in Rangeノードを使用すると良いと思います。
配置する
作成したブループリントをレベルに配置しましょう。
確認してみる
このように生成された瞬間に
ランダムに作成された色が適応されていると思います。
余談
同様の処理を使い、Event Begin PlayをEvent Tickに
変更してみました。