Gaming Life

一日24時間、ゲームは10時間

UE4 メッシュの一部の色をBPで動的に変更する

 以前の記事でマテリアルエディタ上で一部の色だけを切り替える仕組みを作った。で、折角だしBlueprint上でパラメータを切り替えられるようにしようと試してみた。

ai-gaminglife.hatenablog.com

動的にマテリアルのパラメータを制御するBPを作る

f:id:ai_gaminglife:20180706191606p:plainf:id:ai_gaminglife:20180706191608p:plainf:id:ai_gaminglife:20180706191612p:plainf:id:ai_gaminglife:20180706191616p:plain 

 詳細は省くが、これでBlueprint上でマテリアルで設定したパラメータを制御出来るようになる。今回は設定したBoxCollisionにOverlapしたら"SwitchJumpMaterialColor"でマテリアルで設定したboolパラメータ、"IsJump"を切り替えることで色を変える、といったことをしている。

f:id:ai_gaminglife:20180706191659p:plain

 で、そのSwitchJumpMaterialColor関数を作っている時にある問題に気づく。

f:id:ai_gaminglife:20180706191714p:plain  Bool ParameterをSetするBPが、ない。

解決策

 考えてみたら当然のことで、マテリアル上で用意したboolパラメータIsJumpは正確に言うと、Static Bool Parameter、つまり静的なbool変数だったのだ。静的変数を動的に変更することなぞ出来ない。Dynamic=動的に変更が出来るマテリアルパラメータは

の3つのみの模様。というわけで今回はScalar(=float型変数)パラメータで色を切り替えられる様にしてみた。

f:id:ai_gaminglife:20180706191724p:plain

 Scalarパラメータ"IsJump"を0-1にClampし、その値で元のテクスチャと一部の色を変更したテクスチャを線形補間している。これでIsJumpが0なら元のテクスチャが、1なら変更後のテクスチャを表示させることが出来る。

 で、実際パラメータを制御する関数は画像の通り。

f:id:ai_gaminglife:20180706191733p:plain

 これで動的に色を切り替えることが出来るようになった。