【ClusterScript忘備録】getItemsNearで物理衝突しないアイテムのItemHandleを取得できない
背景
プレイヤーに常に追従して動くアイテムを作りたい
getItemsNear()でItemHandleを取得して、ItemHandleのStateにPlayerHandleを渡せば……あれ?動かないぞ?
どうやらItemHandleが取得できてないっぽい…ナンデ?
結論
ColliderとOverlapSourceShapeコンポーネントを付けると取得できます。
調査結果
公式リファレンスに答えが書いてありました。
指定した球状の空間内に検知可能なコライダーが存在する自身を除くアイテムのハンドルの一覧を返します。 検知可能なコライダーは、PhysicalShapeが付いているコライダー、OverlapSourceShapeが付いているコライダー、Shapeが付いていない物理衝突をするコライダーです。 検知対象となるレイヤーはDefault, RidingItem, InteractableItem, GrabbingItemレイヤーです。
どうやら、特定の種類のコライダーがついていないアイテムはgetItemHandleで取得できないようです。プレイヤーに追従する時にコライダーがあると邪魔なのでコライダーを抜いていたのですが、それが原因だったとは……
Shape?ナニソレ?と思ったら、これも公式ドキュメントに書いてありました。
Colliderの振る舞いを指定するコンポーネントです。
同時にセットされたコライダーの衝突判定を制御するコンポーネントのようです。今までIsTriggerで制御してたから知らなかったわこんなコンポーネント……
結論としては、物理衝突しないアイテムをgetItemHandleで取得したい場合は適当なColliderとOverlapSourceShapeをアタッチすることで取得できます。
![](https://assets.st-note.com/img/1722679399336-0dNsZGXSym.png)
備考
もっときれいな実装があったらご一報ください。
この記事が気に入ったらサポートをしてみませんか?