ブループリントで触れたものを光らせる【UE4】

自分用の備忘録として残します。

やりたいこと

  1. VRにて、手で触れているものを光らせる。
  2. 物体同士が触れている間光る。

環境や使用ツール

VRにて、手で触れているものを光らせる。

VRテンプレートの青い箱と同じものを新たに用意する。

マテリアルはマテリアルインスタンス化して使用する。
今回は、以下のキャプチャの"TestMaterial"を作成し、インスタンス化した。
パラメータをScaleと言う名前で作成し、Multipleで掛け合わせたものをEmissivecolorつなぐ。
f:id:japanman0606:20190624233941p:plain

マテリアルインスタンスの設定
f:id:japanman0606:20190624234037p:plain

ブループリントの作成

続いてブループリントの作成を行う。
PickUpActorInterfaceブループリントと同じディレクトリ内にて、StaticMeshAactorで作成。
名前はTestPickCubeとしている。
f:id:japanman0606:20190624234446p:plain

StaticMeshに、デフォルトで入っている1M_Cubeを設定し、
Materialsに先ほど作成したTestMaterial_Instを設定する。
また、Simulate Physics、Simulate Collisionにチェックを入れるなどする。
f:id:japanman0606:20190624235938p:plain

イベントからOverlap2種をONにする。
f:id:japanman0606:20190625214525p:plain

イベントグラフの設定

まず、PickUpActorInterfaceを使用して、つかんだり離したりする動作を実装する。
これはテンプレートで用意されているBP_PickupCubeでの実装と同じ。
以下の記事にて処理の解説をして下さっている。
goolee.hatenablog.com

f:id:japanman0606:20190625000033p:plain

Interfaceについては以下の記事を見るとわかった気になれる。
unrealengine.hatenablog.com


持つ動作を実装したので、次は触れたら光るようにする。

以下のキャプチャのようにノードを組めばできる。
f:id:japanman0606:20190625224039p:plain


まず最初に、EventBeginPlayから、Create Dynamic Material Instanceでマテリアルの情報を動的に変更できるようにする。詳しくは以下の記事の説明がわかりやすいと思う。
monsho.blog63.fc2.com


Create Dynamic Material Instance(Static Mesh Component)を作成したら、Souce Materialに先ほど作成したTestMaterial_Instを設定する。
Return Valueからノードを伸ばし、Promote To Variableを選択してMaterial Dyanamic Instance変数を作成する。変数名はMIDとしている。
これでマテリアルを動的に変更する準備完了。
f:id:japanman0606:20190625224228p:plain

続いて実際に手が触れたら光らせる処理。
最初のOn Component Begin Overlapにて、そのコリジョンに重なっているオブジェクトがあれば、そのノードが発火する。
どのオブジェクトが重なってきているのかは、ActorならOther Actorで, Primitive ComponentならOther Compで判別できる。


今回はOther Actorから Cast To BP_MotionControllerにつなぐことで、BP_MotionController(手)が重なった時だけ次の処理が走るようにしている。
逆にOn Component End Overlapでは、手がコリジョンから離れたときに発火する。

手が重なっているときは、変数colorScaleの値を50でセットし、離れたら0に戻すという処理にしている。
MID変数をGetで配置し、ノードを伸ばした状態でSet Scalar Parameter Valueを選択して配置する。
Parameter NameをScaleにすることで、TestMaterialのScaleパラメータの値を変更させることができる。
f:id:japanman0606:20190625224804p:plain

物体同士が触れている間光る

後で書く。
やっていることは手が触れた時と同じような感じで組むだけ。
ただし、壁などのブロックオブジェクトを光らせるためには、少し大きめのコリジョンをとる必要があるみたい。