VRゲームで指先からWidgetInteractionのレイがヒットした場所まで線を描画したいと思っています。デバッグ目的ではなく、パッケージ時にも描画される線です。
3Dスペースに線を描画する方法いろいろ方法を探してみてビームパーティクルがいいみたいだとわかったので、以下のようにマテリアルとパーティクル、そしてVRプレイヤーの手を以下の画像のように設定しました。手アクターにMotionControllerComponentをつけ、その孫にParticleSystemComponent(ビームパーティクルをセットした以外はデフォルト)を置いています。
(マテリアルにつながっていない余計なノードがありますが無視してください。)
結果は以下のようになりました。
青がパーティクル、赤がDrawDebugLineで描いたほうです。
線の終点となるべき場所はDrawDebugSphereがある場所ですが、御覧のとおりそこまで伸びていません。
これを修正したいです。
修正のために試したこと
-
パーティクルのTarget>TargetMethodをUserSetにしてみた
-
Activate/SetVisibilityの切り替え、または使わずにやった
-
WidgetInteractionのLastHitResultでなく自前LineTraceの使用
-
SetBeamTargetPointで渡す結果にWorld/Local両方の空間のポジションを渡してみた
-
パーティクルをMotionControllerComponentの孫ではなく別のPawnアクターの子にしワールドポジションを渡してみた
-
ImpactPointではなくLocationの使用
しかしうまくいきませんでした。どんな場合でもパーティクルの始点終点のローカル位置はほぼ変わっていないように見えます。画像であるように手を動かすと多少のずれはでますが、パーティクルの長さは変わりません。Pawnアクターの子にすると始点の位置も変わりません。
GetBeamTargetPointで渡した位置の確認をしてみましたが、結果はtrueで正しい位置が返ってきます。
このこととDrawDebugLineの結果をみるに渡しているポジションは正しいと思ったので、パーティクルの確認のために別に空アクターBlueprintを作成し、パーティクルコンポーネントをつけてTick事に少しずつ上昇する値を渡すと想定通りの結果=ビームが少しづつのびるようになりました。これでパーティクルが悪いわけではないみたいとわかったので、何が悪くて想定通りの動作をしないのかわからなくなりました。
よろしくお願いします。