Grabbable(グラバブル)
物を掴めるようにするコンポーネント
項目
- Enabled:
- このコンポーネントを有効にするかどうか。
- ReparentOnRelease:
- 掴んでいる物を離したときに元親スロット(_lastParent)に再親子化する。
- PreserveUserSpace:
- ローカルユーザースペース(ユーザーの居るスロット)に再親子化する。
- DestroyOnRelease:
- 掴んでいる物を放した時に破棄する。
(これで消えたものは二度と帰ってこないので注意しましょう。)
- GrabPriority:
- 掴む優先度。
複数の物を同時に掴んだ際、数字が大きい方が優先される。同じ数字だと一緒に掴める。
- GrabPriorityWhenGrabbed:
- 掴まれた時の優先度。
上記のGrabPriorityにタイミングも含めて制御できる項目。(組合せパターンがややこしい。)
同じ設定の物があった場合、最初に掴んだ物が優先されるっぽい。ちなみに、この項目はNullableの<int?>型です。左側をTrueにすると動作し、右側に値を設定します。
- CustomCanGrabCheck:
- ???
アバターRootのGrabbableコンポーネントに設定されているものは消さないでください。ツールRootの方は謎です。
- EditModeOnly:
- 編集モードの時だけ掴めるようにする。
- AllowSteal:
- 他のユーザーが奪い取れるようにする。
- DropOnDisable:
- 掴んでいる間にEnabledをFalseにしても、それを離すまでは掴んでいられるようにする。
即座に切り離したい場合はFalseにする。
- ActiveUserFilter:
- 物がユーザーの中にあるとき、掴めるかどうかを指定する。
(この項目は列挙型(イーナム)といいます。左右のボタンを押すと順に切替ります。)
0 Disabled 無効 1 OnlyActiveUser ユーザーの中にあるとき、そのユーザーだけ掴める。ユーザーの中にないとき、誰も掴めない。 2 ActiveUserWhenPresent ユーザーの中にあるとき、そのユーザーだけ掴める。ユーザーの中にないとき、誰でも掴める。 3 ExcludeActiveUser ユーザーの中にあるとき、そのユーザーだけ掴めない。ユーザーの中にないとき、誰でも掴める。
- 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」スロットの子階層に移動します。
- 掴む系のコンポーネントは、同じスロットに複数使用できないです。
- 用途に合わせて、掴む系コンポーネントのJointやSliderなどと使い分けましょう。
- ObjectRootコンポーネントのアタッチもお忘れなく!(オブジェクトのRootスロットには必須のコンポーネントです。)