UE4 のマテリアル入門 (10) ダイナミック マテリアル インスタンス (その 2)

ビデオの内容紹介 
前回の続きですが、いよいよ本シリーズ最終巻です。ダイナミック マテリアル インスタンス (DMI) の作り方と応用の仕方を紹介しています。最終的には、DMI を使ってイスの色 (マテリアルのパラメータの 1 つ) をゲームプレイ中に変更して見せます。2 部構成ビデオの「その 2」です。

原題 
Introduction to Materials in UE4 – 10 – Dynamic Material Instances, Part 2

目標
① Construction Script を使ってダイナミック マテリアル インスタンスを作成する。
② プレイヤーが近づくとイスの色をランダムに変化させるために、イスのマテリアルにアクセスする。

スロー

メインエディタのコンテンツ ブラウザで Blueprint フォルダを開き (クリックして)、Random Chair をビューポートにドラッグアンドドロップします。
10001
10002

分かりやすくするために、イスの名前を SM_Chair ではなく Chair に変えます。そのためには、Random Chair ブループリントの Component モードで、左上 Components タブで SM_Chair を右クリックして、Rename をクリックしてから、Chair とタイプします。
10003
10004
すると Event Graph でも自動的に Chair に変更されます。
10005

Random Chair ブループリントを Graph モードにしてから Construction Script を開きます。左の My Blueprint タブから Chair 変数をエディタ内にドラッグアンドドロップします。(方法 Ctrl キーを押しながらドラッグアンドドロップすると、Get として変数を置くことができます。)
10006

次に、この変数 (スタティックメッシュの) を元にして、ダイナミック マテリアル インスタンスを作ります。そのためには、Create Dynamic Material Instance (ダイナミック マテリアル インスタンスを作る) を右クリックメニューから配置して、Chair を Target 入力ピンにつなぎます。
10008
10007
これによって、Chair のマテリアルが Create Dynamic Material Instance によって作られることになります。

さらに、Construction Script と Create Dynamic Material Instance をつなぎます。
10009
これによって、このアクタがレベルに配置されると自動的に Create Dynamic Material Instance が発動することになります。(Construction Script の詳しい動作については、ブループリント クイックショット⑥ プロシージャルなコンテンツの作成に書かれています。)

次に、Create Dynamic Material Instance の Return Value (戻り値) のピンを右クリックして、Promote to variable (変数に昇格させる) を選択します。
10010
すると、Create Dynamic Material Instance に接続された Set ノードが現れるので、名前を Dynamic Material とします。
10011
Set ノードは、その変数に値をセットする (代入する) ということなので、この場合も、Create Dynamic Material Instance によって作られたダイナミック マテリアル インスタンスが変数 Dynamic Material に格納されることになります。こうすることで、いつでもこの変数を使ってこのダイナミック マテリアル インスタンスにアクセスできる (操作できる) ようになります。

ここまでを Compile (コンパイル) して、Save (保存) します。

次に、Event Graph を開いて、My Blueprint タブで Box1 を選択状態にします。
10012
Event Graph 内のスペースで右クリックして、Add Event for Box1 (Box1 のためのイベントを追加する) の下に置かれた Collision (コリジョン) の項の下にある Add OnComponentBeginOverlap (「コンポーネントがオーバーラップを開始時に [発動するイベント]」を追加する) を選択します。
10013
この OnComponentBeginOverlap は、Box1 のためのものなので、Box1 の範囲にプレイヤーが入る (オーバーラップする) と、OnComponentBeginOverlap の実行ピンにつながる処理がイベントととして呼び出されます。

次に、My Blueprint タブから Dynamic Material 変数を Event Graph にドラッグアンドドロップします。
10014
Dynamic Material 変数を作った意味は、これから行うように、マテリアルを変化させるためです。

さらに、Dynamic Material 変数のピンからワイヤをドラッグして放しメニューを表示させ、Set Vector Parameter Value (ベクター パラメータの値をセットする) を選択します。
10015
これは、マテリアルがもっているパラメータに値をセットする (入れる) ための関数です。

さらに、Dynamic Material 変数を Set Vector Parameter Value の Target につなぎます。
10016
これによって、どのマテリアルのパラメータの値をセットするかがはっきりします。

次に、Set Vector Parameter Value の Parameter Name (パラメータ名) の None (なし) に実際に値をセットするパラメータの名前を入れなければなりません。その名前を調べます。

まず、Random Chair ブループリントの Components モードの View でイスを選択状態にします。さらに Details タブの Static Mesh (スタティックメッシュ) のアイコンをダブルクリックします。
10017
すると、次のようにスタティックメッシュ エディタが開くので、右側の Details タブのトップにマテリアルのアイコンが表示されているので、それをダブルクリックします。
10018
するとマテリアル エディタが開かれます。
10019
ちなみに全体像は次のようになります。
10020
ここで変更すべきパラメータは ColorSeats です。
10021
左の Details パネルを見ると、Material Expression Vector Parameter (マテリアルの式 ベクタ パラメータ) とあり、Parameter Name が ColorSeats になっています。この ColorSeats を Set Vector Parameter Value の Parameter Name にタイプします。
10022
これで、ColorSeats の値をセットすることができるようになりました。

次に、どのような値をセットするかを決めます。ここではとりあえず、ランダムではなく緑の固定した値をセットしています。まず、Set Vector Parameter Value の Value (値) をダブルクリックします。するとカラーピッカーが表示されるので、(たとえば) 緑の色をセットします。
10023

Compile してゲームをプレイしてみると、
10024
のようになっていたイスが、近づくと (プレイヤーが Box1 の範囲に入ると)、
10025
のようになります。

ここまではうまく行っているようなので、次にランダムに色がセットされるようにします。まず、スペースで右クリックして、Random Float in Range (ある範囲内にあるランダムな float 値) を選択します。
10026
これは、Min から Max までの範囲にある値をランダムに返す関数です。

この Min は 0.0 のままで、Max を 1.0 にして、この関数をあと 2 つ作ります。(方法 Ctrl+C → Ctrl+V で簡単にコピーアンドペーストできます。)
10027
これは、色が 3 つの値 (R、G、B) から構成されるためです。

次に、スペースをクリックして Make Color (色を作成する) を選択します。
10028

3 つの Random Float in Range を Make Color の R、G、B につなぎます。そして出来上がるもの (Return Value から出てくるもの) を Set Vector Parameter Value の Value につなげます。
10029
Make Color は、3 つの Random Float in Range の値から色データを作成しています。結果として出来た色データは、Set Vector Parameter Value に供給されます (先ほどの緑色に代えて)。

Compile して Play すると次のようになります。
10030
10031
10032
OnComponentBeginOverlap を使っているので、オーバーラップ開始時にイベントが発動します。だから、さらに色を変えるには、イスから一旦離れてから再度 Box1 の範囲に入るようにします。

今回は以上になります。本シリーズ最終巻までご覧になっていただき、ありがとうございました!



シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. 匿名 より:

    すごく分かりやすい内容でした!