Transform/Interaction/Grabbable

Last-modified: 2026-05-02 (土) 19:11:55


Grabbable(グラバブル)

物を掴めるようにするコンポーネント


項目

Enabled:
このコンポーネントを有効にするかどうか。

ReparentOnRelease:
掴んでいる物を離したときに元親スロット(_lastParent)に再親子化する。

PreserveUserSpace:
ローカルユーザースペース(ユーザーの居るスロット)に再親子化する。

DestroyOnRelease:
掴んでいる物を放した時に破棄する。
(これで消えたものは二度と帰ってこないので注意しましょう。)

GrabPriority:
掴む優先度。
複数の物を同時に掴んだ際、数字が大きい方が優先される。同じ数字だと一緒に掴める。

GrabPriorityWhenGrabbed:
掴まれた時の優先度。
上記のGrabPriorityにタイミングも含めて制御できる項目。(組合せパターンがややこしい。)
同じ設定の物があった場合、最初に掴んだ物が優先されるっぽい。

ちなみに、この項目はNullableの<int?>型です。左側をTrueにすると動作し、右側に値を設定します。


CustomCanGrabCheck:
???

アバターRootのGrabbableコンポーネントに設定されているものは消さないでください。ツールRootの方は謎です。


EditModeOnly:
編集モードの時だけ掴めるようにする。

AllowSteal:
他のユーザーが奪い取れるようにする。

DropOnDisable:
掴んでいる間にEnabledをFalseにしても、それを離すまでは掴んでいられるようにする。
即座に切り離したい場合はFalseにする。

ActiveUserFilter:
物がユーザーの中にあるとき、掴めるかどうかを指定する。
(この項目は列挙型(イーナム)といいます。左右のボタンを押すと順に切替ります。)
0Disabled無効
1OnlyActiveUserユーザーの中にあるとき、そのユーザーだけ掴める。ユーザーの中にないとき、誰も掴めない。
2ActiveUserWhenPresentユーザーの中にあるとき、そのユーザーだけ掴める。ユーザーの中にないとき、誰でも掴める。
3ExcludeActiveUserユーザーの中にあるとき、そのユーザーだけ掴めない。ユーザーの中にないとき、誰でも掴める。

OnlyUsers(list):
Add押すとリストが増える。
リストに指定したユーザーのみ掴めるようにする。

(間違えて押してしまい、アイテムが掴めなくなってパニックになる人が居ます。リストを消せば大丈夫です。落ち着いて確認しましょう。)


Scalable:
掴んで拡大縮小できるようにする。
(初期設定はFalseだけど、Box等を新規作成するとTrueの状態で出てくる。)

アバターの場合(CustomCanGrabCheckが働いていても)Trueにすると、Hitしたレーザーが赤くなります。(バグっぽい?)


Receivable:
GrabbableReceiverSurfaceコンポーネント等に乗っかるようにする。
勝手に乗っかっちゃうのがイヤならFalseにしましょう。

AllowOnlyPhysicalGrab:
レーザー操作(リモートグラブ)で掴めないようにする。
(これをTrueにするとデスクトップモードの人が不憫です。)

_grabber:
自動。
手の掴むヤツ。

(掴んだユーザーのグラバーが自動的に設定される。超上級者向けですが、Flux等で設定する事も可能です。)

_lastParent:
自動。
元親スロット。

_lastParentIsUserSpace:
自動。
元親スロットはユーザーの中だった。

__legacyActiveUserRootOnly:
???


使用例

  • 物を掴めるようにするには、Colliderの設定も必須です。
  • コライダーの配置場所について
    なるべくGrabbableと同じスロット、または階層的に近い場所にコライダーを置くことを推奨します。
    SliderやJoint用のコライダーがGrabbable用コライダーよりも近い階層にあると、レーザーグラブ(遠隔の物を掴んだ状態)した物を手元に引き寄せてフィジカルグラブ(手で物を掴んだ状態)に切り替わる際、GrabbableではなくSlider等の方を掴んでしまう仕様(バグ?)が発生します。


    小技集
  • GrabPriorityの初期値は0です。
    例えば、机側を値を「-1」に下げると、机の上の物が優先的に掴めるようになり、操作性が向上します。ユーザーに優しい設計のアイテムは、この項目が適切に設定されていることが多いです。
  • DestroyOnReleaseをTrueにすると、手放した瞬間にオブジェクトが消去されます。
    「手榴弾のピンを抜いた後にピンを消す」といったギミックに有効です。不要なオブジェクトを残さないことは、ワールドの軽量化において非常に重要です。
  • EditModeOnlyをTrueにすると、編集モード中のみ操作可能になります。
    ワールド制作中のレイアウト調整などに便利です。(Button系コンポーネントにも同様の設定があります。)
    編集モードの切り替えは、ダッシュメニューのセッションの設定等から行えます。
  • AllowStealをTrueにすると、他の人が持っているアイテムを奪えるようになります。
    トランプ遊びのババ抜きなどの再現に最適です。
  • OnlyUsers(list)にユーザーを指定する方法(一例)
    新規作成 > エディター > ユーザーインスペクター を開く。
    ユーザーインスペクターの左側で対象ユーザーを選択し、右側上部の「User」を掴んで、リスト内に突っ込む。


その他

  • 非常に多機能なコンポーネントですが、初期設定のまま使われがちです。
    「苦労してFluxで組んだ機能が、実は標準設定に備わっていた」というケースも多いため、まずは各設定項目を確認してみましょう。(これは他のコンポーネントも同様です。)
  • 配下のスロットを掴ませたくない場合は、GrabBlockコンポーネントを併用します。
  • 掴んでいる間、オブジェクトは手の中にある「Holder」スロットの子階層に移動します。
  • 掴む系のコンポーネントは、同じスロットに複数使用できないです。
  • 用途に合わせて、掴む系コンポーネントのJointSliderなどと使い分けましょう。
  • ObjectRootコンポーネントのアタッチもお忘れなく!(オブジェクトのRoot(根本)スロットには必須のコンポーネントです。)