UE4 メッシュの一部の色をBPで動的に変更する
以前の記事でマテリアルエディタ上で一部の色だけを切り替える仕組みを作った。で、折角だしBlueprint上でパラメータを切り替えられるようにしようと試してみた。
動的にマテリアルのパラメータを制御するBPを作る
詳細は省くが、これでBlueprint上でマテリアルで設定したパラメータを制御出来るようになる。今回は設定したBoxCollisionにOverlapしたら"SwitchJumpMaterialColor"でマテリアルで設定したboolパラメータ、"IsJump"を切り替えることで色を変える、といったことをしている。
で、そのSwitchJumpMaterialColor関数を作っている時にある問題に気づく。
Bool ParameterをSetするBPが、ない。
解決策
考えてみたら当然のことで、マテリアル上で用意したboolパラメータIsJumpは正確に言うと、Static Bool Parameter、つまり静的なbool変数だったのだ。静的変数を動的に変更することなぞ出来ない。Dynamic=動的に変更が出来るマテリアルパラメータは
- Scalar
- Texture
- Vector
の3つのみの模様。というわけで今回はScalar(=float型変数)パラメータで色を切り替えられる様にしてみた。
Scalarパラメータ"IsJump"を0-1にClampし、その値で元のテクスチャと一部の色を変更したテクスチャを線形補間している。これでIsJumpが0なら元のテクスチャが、1なら変更後のテクスチャを表示させることが出来る。
で、実際パラメータを制御する関数は画像の通り。
これで動的に色を切り替えることが出来るようになった。
色々勘違いしてるところがあったので手直しして動的色切り替え pic.twitter.com/Yl41XCSfOr
— ai (@ai_9684_dct) July 5, 2018