【UE4】物体を「持つ」!「運ぶ」!「放す」!

www.youtube.com

UE4に便利な機能があり、簡単に実装できるので紹介します(゜-゜)

細かい説明要らない!って方は各項目の最後あたりにノードの全体図があるのでそちらをどぞ!

 

 「持つ」!「運ぶ」!

 まずはアクターの詳細から物体の物理エンジンを有効にします。

f:id:shuntaendo:20160303225604p:plain

 

プレイヤーのブループリントにて入力イベント(何のイベントでもいいですが今回はマウスの左クリック)と
Boolean型の変数を一つ用意しました。(デフォルトでFalse)

f:id:shuntaendo:20160303230608p:plain

 

Falseからピンを伸ばしLineTraceForObjectsに繋ぎます。

f:id:shuntaendo:20160303231443p:plain

Get Player Camera Managerでカメラを取得して、カメラの位置からTrace Distanceで決めた距離までレイキャストを飛ばします。

デバッグ時はDraw Debug TypeをFor Durationにしておくとデバッグがしやすいです。

f:id:shuntaendo:20160303232109p:plain

Object Typesに配列を繋ぎます。

f:id:shuntaendo:20160303232513p:plain

配列を1つ増やしデフォルトでPhysicsBodyを入れておきます。

f:id:shuntaendo:20160303232644p:plain

これでObject TypeがPhysicsBodyのアクターをレイキャストした時、LineTraceForObjectsのReturn ValueからTrueが返ってくるようになりました。

 

始めにアクターの物理エンジンを有効にしたときに勝手にObject TypeをPhysicsBodyに変えてくれてます。(正確にはCollision Presetsが変わってます。)

f:id:shuntaendo:20160303233208p:plain

 

レイキャストが成功したら最初に作ったIs HandleをTrueにします。

そして、Break Hit Resultでレイキャストしたアクターの情報を取得します。

f:id:shuntaendo:20160303233546p:plain

Is HandleからAdd Physics Handle Componentというノードに繋ぎ、コンポーネントを追加します。

f:id:shuntaendo:20160303234433p:plain

これが便利なコンポーネント

Physics Handle ComponentとHit Componentから変数に格納しておきます。後で使います。

 

Physics Handle Componentを格納した変数からピンを伸ばしGrab Componentノードに繋ぎます。このノードに設定したコンポーネントを持つことができます!

入力ピンに相手の情報を入れます。

f:id:shuntaendo:20160303235007p:plain

 

Set Collision Response to Channelノードに繋ぎます。レイキャストしたオブジェクトのPawnとの衝突判定を無視するようにします。

f:id:shuntaendo:20160303235413p:plain

プレイヤーのObject TypeはPawnなので、プレイヤー自身とオブジェクトが当たらないようにしてます。

 

全体図はこんな感じ!

f:id:shuntaendo:20160304001244p:plain

 

f:id:shuntaendo:20160304001231p:plain

 

次にTickノードから繋いでいきます。

オブジェクトを持っている時にオブジェクトのLocationを更新してします。

Update Handle Objectというのは作った関数です。

f:id:shuntaendo:20160304000444p:plain

 

中身はこんな感じ~。

f:id:shuntaendo:20160304001757p:plain

 

これで「持つ」「運ぶ」ができるようになりました!ヤッター!

 

「放す」 !

 最初のマウスの左クリックのイベントに戻りましょう。

放すのは簡単です。

Release ComponentPhysics Handle Componentをプレイヤーから外してオブジェクトとプレイヤーの衝突判定を直しておきます。

f:id:shuntaendo:20160304002115p:plain

 

細かい設定

 Physics Handle Componentのパラメータを弄ることによってオブジェクトを持った時のオブジェクトの挙動を調整することができます。

f:id:shuntaendo:20160304002843p:plain

特に設定してないとデフォルトの値になります。

Damping = 移動した時のブレ

Stiffness = 修正速度

Interpolation Speed = DampingとStiffnessの補間のスピード?間隔?

 

また、持つ処理の時に使っていたGrab ComponentのConstain Rotationのチェックを入れると持った時の角度を元の角度とし、オブジェクトが壁などに当たって角度が変わると、元の角度に戻ろうとします。

f:id:shuntaendo:20160304003635p:plain

 

以上です!
Physics Handle ComponentはContentExamplesにもサンプルがありますので分からなかったらそっちのノードを見てみるとよいかもしれません!

 

※補足

Grab ComponentのGrab Location(持つ位置、中心点)はBreak Hit ResultのLocationではなくHit ActorからのGet Actor Locationを繋いだ方がよさそうです。

f:id:shuntaendo:20160311134601p:plain