【ClusterScript忘備録】getItemsNearで物理衝突しないアイテムのItemHandleを取得できない

背景

  1. プレイヤーに常に追従して動くアイテムを作りたい

  2. getItemsNear()でItemHandleを取得して、ItemHandleのStateにPlayerHandleを渡せば……あれ?動かないぞ?

  3. どうやらItemHandleが取得できてないっぽい…ナンデ?

結論

ColliderとOverlapSourceShapeコンポーネントを付けると取得できます。

調査結果

公式リファレンスに答えが書いてありました。

指定した球状の空間内に検知可能なコライダーが存在する自身を除くアイテムのハンドルの一覧を返します。 検知可能なコライダーは、PhysicalShapeが付いているコライダー、OverlapSourceShapeが付いているコライダー、Shapeが付いていない物理衝突をするコライダーです。 検知対象となるレイヤーはDefault, RidingItem, InteractableItem, GrabbingItemレイヤーです。

どうやら、特定の種類のコライダーがついていないアイテムはgetItemHandleで取得できないようです。プレイヤーに追従する時にコライダーがあると邪魔なのでコライダーを抜いていたのですが、それが原因だったとは……

Shape?ナニソレ?と思ったら、これも公式ドキュメントに書いてありました。

Colliderの振る舞いを指定するコンポーネントです。

同時にセットされたコライダーの衝突判定を制御するコンポーネントのようです。今までIsTriggerで制御してたから知らなかったわこんなコンポーネント……

結論としては、物理衝突しないアイテムをgetItemHandleで取得したい場合は適当なColliderとOverlapSourceShapeをアタッチすることで取得できます。

これで解決

備考

もっときれいな実装があったらご一報ください。

いいなと思ったら応援しよう!