ボーンとオブジェクトの距離測定

キャラクターのボーンとオブジェクトがある範囲内に同時に存在するときのみ距離測定を行いたいです。

214959-aho.png

キャラクタ側のブループリントにカプセルコリジョンを設置し、オーバーラップイベントが起こった場合にOtherActorとコリジョンにオーバーラップしているボーンとの距離を測定しようと思ったのですが、
コリジョンにオーバーラップしているボーンを取得する方法がわかりません。

オーバーラップした自身のボーンを取得する方法を教えて下さい。
もしくは他にいい方法があればそちらも教えてもらえるとありがたいです。

ボーン自体にオーバーラップ用のコリジョンをつけて直接判定してください。

ボーン自体につける場合にはSkeletal Mesh Componentを親にして、AttachToComponentノードを利用して、Socketにボーン名またはソケット名を指定することでアタッチが可能です。

https://docs.unrealengine.com/latest/INT/BlueprintAPI/Utilities/Transformation/AttachToComponent/index.html

回答ありがとうございます。
幾つか質問があります。

  1. AttachToComponentを呼び出すのはBeginPlay時でいいのでしょうか
  2. root component cannot be …(ルートコンポーネントは同じアクタの他のコンポーネントに取り付けられない)といったような警告がでるのですがどういう意味でしょうか
  3. ボーンにコリジョンをつけた後はどのように判定すればいいのでしょうか?現在は判定用のコリジョン(sensor)のOnComponentBeginOverlapイベントの返り値であるOtherActorからオブジェクト(図の青丸)を取得しています。同時にボーンを取得するにはどうすればいいのでしょうか?

よろしくおねがいします。

1.Begin Playでもいいですが、Constrction Scriptでやるのをおすすめします。BPのビューポートタブ上でアタッチしていることを確認できます。

215389-2017-10-01-23h39-48.png

2.言葉のままです。ルートコンポーネントは一番親となるコンポーネントなので、そのアクターの他のコンポーネントに取り付けることはできません。ルートコンポーネントにコリジョンをつけず、別途コリジョンコンポーネントを作ってください。下記は別途腕にカプセルコンポーネントを作っています。

3.やり方自体はそのままOnComponentBeginOverlapを使うことで問題ありません。あとはOverlaped Componentはそのままボーンの位置などを扱うことができるので、そのまま距離判定に使ってください。

215391-2017-10-01-23h48-06.png

ありがとうございます。
おかげさまでコリジョンをボーンにアタッチしボーンの位置を取得することができました。

今回私がおこないことは
ある領域(sensor)内にボーン(LeftHandCollision)とオブジェクトが存在したら2つの距離を測定する
というものだったのでsensorのオーバーラップイベントが起動した際にボーンとオブジェクトのロケーションを取得しようと思い、以下のようにノードを組んだところsensorにLeftHandCollisionがオーバーラップしていなくてもロケーションを取得することができてしまいました。

もしかしてオーバーラップしているかを確認する処理が必要でしょうか?

これだとLeftHandCollisionがオーバーラップしていようが、senserにオーバーラップした瞬間に最後にアクセスしたOverlapped Componentの情報を使用してしまいます。

ノードのラインが接続していないものを利用しようとすると、意図しない挙動になる可能性が高いです。LeftHandCollision自身の情報は直接コンポーネントをGetしてきたものをご利用ください。