Transform/Interaction/Grabbable

Last-modified: 2024-11-23 (土) 20:51:59


Grabbable(グラバブル)

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


項目

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

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

PreserveUserSpace:
ローカルユーザースペースに再親子化する。

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

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

GrabPriorityWhenGrabbed:
掴まれた時の優先度。
上記のGrabPriorityにタイミングも含めて制御できる項目。(組合せパターンがややややこしい。)
同じ設定の物があった場合、最初に掴んだ物が優先されるっぽい。
ちなみに、この項目はNullableのint?型です。左側をTrueにすると動作します。右側に値を設定します。

CustomCanGrabCheck:
???
この世には知らなくても良い事が沢山あります。これもその一つです。
アバターのGrabbableコンポーネントに設定されているものは消さないでください。消すと、アバターが掴めるようになってしまい、自分で自分を掴んでしまいます。ツールにもあるけど、謎です。

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

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

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

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

OnlyUsers(list):
Addを押すとリストが増える。
リストに指定したユーザーのみ掴めるようにする。
間違えて押してしまい、アイテムが掴めなくなってパニックになる人が居ます。大丈夫、消せば大丈夫です。落ち着いて確認しましょう。

Scalable:
掴んで拡大縮小できるようにする。
迷ったらTrueでOK。(大抵のアイテムは拡大縮小できた方が便利。)
初期設定はFalseだけど、Box等を新規作成するとTrueの状態で出てくる。

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

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

_grabber:
自動。
手の掴むヤツ。(名前にアンダーバー付いてるのは自動っぽい。アプデで消えちゃうかもしれないので、使用する際は覚悟しましょう。)

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

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

__legacyActiveUserRootOnly:
???


使用例

  • 掴めるようにするにはColliderも必要。
  • GrabPriorityの初期値は0なので、机側を-1にすると机の上の物がとりやすくなります。使いやすくて良いアイテムは、この項目が適切に設定されている事が多いです。
  • DestroyOnReleaseをTrueにすると、手榴弾のピンを抜いてから手を放すとピンが消えるギミックができる。ゴミを残さないのは超大事。軽量第一です!
  • EditModeOnlyをTrueにすると、編集モードの時だけ動かせるので、ワールド製作中に活用すると便利です。Button系コンポーネントにも同じ設定項目があります。
    編集モードの切替は、ダッシュメニューのセッションの設定から可能です。
  • AllowStealをTrueにすると、トランプ遊びのババ抜き等ができます。
  • OnlyUsers(list)にユーザーを指定する方法の一例
    新規作成からエディターのユーザーインスペクターを開いて、ユーザーインスペクターの左側でユーザーを選択して、右側一番上のUserを掴んで、OnlyUsersリストのUser:に突っ込む。(ユーザーインスペクターはホストしか開けないっぽい。バグかも。)
    このほかにも、Userが取れるアイテムやコンポーネントを使う方法もあります。


その他

  • 挙動を細かく設定できるのですが、初期設定のまま使われる事が多いです。その為、頑張ってFlux等で実装した機能が標準機能で有った。という事例をたまに見かけます。
  • 配下のSlotを掴まれたくない時はGrabBlockコンポーネントを使用します。
  • 掴むと手の中のHolderスロットの子になる。
  • 掴む系のコンポーネントは同じスロットにアタッチしない。(できない。)
    動きを制限するならJointSliderが便利。