UE4:ドラッグアンドドロップでマテリアルを変えるブループリントの実装
以前こういったものを作りまして
配布すると書いておきながら、ノードが汚くそのまま配布するのも嫌だなと思って一週間以上が立ってます。
その中の処理の一個で一個ドラッグアンドドロップでマテリアルを変えるものを作ったのですが思ったより簡単に実装できたので記事にします。
動画での手法はデータテーブルにマテリアルデータとテクスチャーを入れて、テーブルに存在する分Widget上のスクロールボックスにボタンのWidgetを配置していく手法なのですが、この処理をブログに書くのはちょっとアレなので簡易版を作成しました。
ドラッグアンドドロップでマテリアルを変えよう!
Pawn側のBlueprint
Pawnを作成します。
親クラスをDefaultPawnにしました。
GameModeのBPを作成しました。ここに先ほど作ったPawnをDefaultPawnClassに設定します。
Pawn上のブループリントグラフにてマウスの表示とイベントが発生できるようにしました。
Widgetのブループリント
Widgetを作成します。普通にボタンを表示しただけとなります。
ボタンの設定を変更します。
ClickMethodをPreciseClickにしました。カーソルがボタンに合わさった時にカーソルの種類がGrabHandに変わるようにも設定しました。
Widgetグラフ上でボタンをプレスした場合とリリースした場合のイベントノードを設置しました。
マテリアル型の変数を作成します。ボタンを押したらBoolean型をTrueにしマテリアルの変数にマテリアルを設定します。リリースしたらBoolean型をFaulseにします。
BlueprintInterface
WidgetとPawnを通信するためにBlueprintInterfaceを作成します(書いている時に気が付きましたが、普通にカスタムイベントでも行ける気がしますね!)
インプットにBoolean型の変数を設定しました。これでクリックしているかどうかを判別します。
Widgetのブループリント
BluePrintInterfaceをWidgetに設定した後、作成したイベントを設置します。Branchで枝分けしてFalseだった場合先ほど作成したBoolean型の変数をFalseにします。
Pawnのブループリント
先ほどマウスを設定したノード構成の後ろにWidgetを作成しViewPortするノードを加えます。これでWidgetが反映されます。
アクションインプットからFireを出し、以下のように設定します。
ブループリントインターフェース
マテリアル情報をWidget側とPawn側で通信するためにブループリントインターフェースを作成します。
Pawnのブループリント
ブループリントインターフェースを設定します。
Widgetのブループリント
作成したブループリントインターフェースの関数を出します。GetPlayerPawnから関数を出します。そしてマテリアルのインプットにはWidget上で作成した変数を入れておきます。
Pawnのブループリント
BPインターフェース上で作成したイベントを設置します。Pawn側でもMaterial型の変数を作成し繋げます。
これでボタンを押した時にPawnにMaterial情報が行くようになりました。
マウスをリリースした後にカーソルの下にあるオブジェクトのマテリアルを変えたいのでリリースの処理の後にノードを組んでいきます。
Isvalidでマテリアルの変数の中身が入っているかを判別します。入っていない場合は処理が何も起こらないようにしないとエラーが起こりがちとなります。
リリースした後にマウス下のメッシュを取得します。BreakHitResultで取得したメッシュをターゲットとしたSetMaterialノードを設置します。
ドラッグアンドドロップで持って行きたいのでマテリアルをセットした後にマテリアル変数の中身を空にします。
最後にクリックした後にSetInputModeGameAndUIノードを設置すれば完成です。
他の手法もあったら是非教えて下さい。
以上です。
告知
らしいので当日までには形に・・・/サークル「DobullDogsStudio」は、コミックマーケット90で「日曜日 西地区 "b" 44b」に配置されました! https://t.co/4rsYTvJN3j #C90WebCatalog
— ぶっさん (@Bussan_desu) 2016年6月10日
何かしら形にして配布するのでよろしくお願いします。