Grabbable(グラバブル)
物を掴めるようにするコンポーネント
項目
- Enabled:
- このコンポーネントを有効にするかどうか。
- ReparentOnRelease:
- 掴んでいる物を離したときに元親スロット(_lastParent)に再親子化する。
- PreserveUserSpace:
- ローカルユーザースペース(ユーザーの居るスロット)に再親子化する。
- DestroyOnRelease:
- 掴んでいる物を放した時に破棄する。
(これで消えたものは二度と帰ってこないので注意しましょう。)
- GrabPriority:
- 掴む優先度。
複数の物を同時に掴んだ際、数字が大きい方が優先される。同じ数字だと一緒に掴める。
- GrabPriorityWhenGrabbed:
- 掴まれた時の優先度。
上記のGrabPriorityにタイミングも含めて制御できる項目。(組合せパターンがややこしい。)
同じ設定の物があった場合、最初に掴んだ物が優先されるっぽい。
ちなみに、この項目はNullableの<int?>型です。左側をTrueにすると動作し、右側に値を設定します。
- CustomCanGrabCheck:
- ???
アバターのGrabbableコンポーネントに設定されているものは消さないでください。ツールの方は謎です。
- 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も必要。
- GrabPriorityの初期値は0なので、机側を-1にすると机の上の物がとりやすくなります。使いやすくて良いアイテムは、この項目が適切に設定されている事が多いです。
- DestroyOnReleaseをTrueにすると、手榴弾のピンを抜いてから手を放すとピンが消えるギミックができる。ゴミを残さないのは超大事。軽量第一です!
- EditModeOnlyをTrueにすると、編集モードの時だけ動かせるので、ワールド製作中に活用すると便利です。(Button系コンポーネントにも同じ設定項目があります。)
編集モードの切替は、ダッシュメニューのセッションの設定から可能です。 - AllowStealをTrueにすると、トランプ遊びのババ抜き等ができます。
- OnlyUsers(list)にユーザーを指定する方法の一例
新規作成からエディターのユーザーインスペクターを開いて、ユーザーインスペクターの左側でユーザーを選択して、右側一番上のUserを掴んで、OnlyUsersリストのUser:に突っ込む。
このほかにも、Userが取れるアイテムやコンポーネントを使う方法もあります。
その他
- 挙動を細かく設定できるのですが、初期設定のまま使われる事が多いです。その為、「頑張ってFluxで実装した機能が標準機能で有った」という事例をたまに見かけます。
- 配下のSlotを掴まれたくない時はGrabBlockコンポーネントを使用します。
- 掴むと手の中のHolderスロットの子になる。
- 掴む系のコンポーネントは同じスロットにアタッチしてはいけません。(できない。)
似たようなコンポーネントのJointやSliderも便利です。(用途に合わせて使い分けましょう。)