ブループリントで触れたものを光らせる【UE4】
自分用の備忘録として残します。
やりたいこと
- VRにて、手で触れているものを光らせる。
- 物体同士が触れている間光る。
環境や使用ツール
- Windows 10 home
- Unreal Engine 4.22
- Oculus Quest
VRにて、手で触れているものを光らせる。
VRテンプレートの青い箱と同じものを新たに用意する。
マテリアルはマテリアルインスタンス化して使用する。
今回は、以下のキャプチャの"TestMaterial"を作成し、インスタンス化した。
パラメータをScaleと言う名前で作成し、Multipleで掛け合わせたものをEmissivecolorつなぐ。
マテリアルインスタンスの設定
ブループリントの作成
続いてブループリントの作成を行う。
PickUpActorInterfaceブループリントと同じディレクトリ内にて、StaticMeshAactorで作成。
名前はTestPickCubeとしている。
StaticMeshに、デフォルトで入っている1M_Cubeを設定し、
Materialsに先ほど作成したTestMaterial_Instを設定する。
また、Simulate Physics、Simulate Collisionにチェックを入れるなどする。
イベントからOverlap2種をONにする。
イベントグラフの設定
まず、PickUpActorInterfaceを使用して、つかんだり離したりする動作を実装する。
これはテンプレートで用意されているBP_PickupCubeでの実装と同じ。
以下の記事にて処理の解説をして下さっている。
goolee.hatenablog.com
Interfaceについては以下の記事を見るとわかった気になれる。
unrealengine.hatenablog.com
持つ動作を実装したので、次は触れたら光るようにする。
以下のキャプチャのようにノードを組めばできる。
まず最初に、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としている。
これでマテリアルを動的に変更する準備完了。
続いて実際に手が触れたら光らせる処理。
最初の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パラメータの値を変更させることができる。
物体同士が触れている間光る
後で書く。
やっていることは手が触れた時と同じような感じで組むだけ。
ただし、壁などのブロックオブジェクトを光らせるためには、少し大きめのコリジョンをとる必要があるみたい。