Slider (スライダー)
掴んで移動させたときに動きを制御(制限)するコンポーネント
項目
- Enabled:
- このコンポーネントを有効にするかどうか。
- EditModeOnly:
- 編集モードの時だけ掴めるようにする。
- AllowSteal:
- 他のユーザーが奪い取れるようにする。(DontDriveがTrueの時に機能する。)
- DropOnDisable:
- 掴んでいる間にEnabledをFalseにしても、それを離すまでは掴んでいられるようにする。
即座に切り離したい場合はFalseにする。
- DontDrive:
- 自スロットのPositionらを駆動しない。
初期設定(False)の時、掴むとPositionが駆動されます。Trueの時は書込みっぽい。ホストがAFK(不在)だったり、一部のヘッドレスセッションでは、挙動がおかしくなるかも。
とりあえずTrueにして、様々な環境やユーザーでテストしてみましょう。
さらに、Positionを他からも制御している場合は難解です。(ローカルで動いちゃってる可能性もあるので、様々な検証が必要です。)
- AllowOnlyPhysicalGrab:
- レーザー操作(リモートグラブ)で掴めないようにする。
これをTrueにするとデスクトップモードの人が不憫です。
- ActiveUserFilter:
- 物がユーザーの中にあるとき、掴めるかどうかを指定する。
(Sliderを掴んでも手の中(Holder)に入らないので、Grabbableとは挙動が異なります。)
0 Disabled 無効 1 OnlyActiveUser ユーザーの中にあるとき、そのユーザーだけ掴める。ユーザーの中にないとき、誰も掴めない。 2 ActiveUserWhenPresent ユーザーの中にあるとき、そのユーザーだけ掴める。ユーザーの中にないとき、誰でも掴める。 3 ExcludeActiveUser ユーザーの中にあるとき、そのユーザーだけ掴めない。ユーザーの中にないとき、誰でも掴める。
- CustomCanGrabCheck:
- ???
- _grabber:
- 自動。
手の掴むヤツ。
(掴んだユーザーのグラバーが自動的に設定される。上級者向けですが、Flux等で設定する事も可能です。)
- _holdSlot:
- 自動。
手の掴むヤツのスロット。(放しても残るので、最後に掴んだ人が分かる。)
- _pos:
- 自動。
自スロットのPositionを駆動。
- _rot:
- 自動。
自スロットのRotationを駆動。
- _scl:
- 自動。
自スロットのScaleを駆動。
- __legacyActiveUserRootOnly:
- ???
- GrabPriority:
- 掴む優先度。
複数の物を同時に掴んだ際、数字が大きい方が優先される。同じ数字だと一緒に掴める。
- Rotatable:
- 回転させる。
- Scalable:
- 拡大縮小させる。
- Range:
- 移動距離。
例えばx軸1mだと±1mではなく、Origin(原点位置)から±0.5mです。
- Origin:
- 原点位置。
- MinScale:
- 大きさの最小値。
- MaxScale:
- 大きさの最大値。
- VibrationOffset:
- 振動間隔。
0だと掴んでいる間、ずっと振動し続ける。
1だと1m移動する度に1回振動する。
- VibrationPreset:
- 掴んで動かした時のコントローラー振動設定。
0 None 無 1 Short 弱 2 Medium 中 3 Long 強
- SnapIncrement:
- スナップ値。
0だと無段階。
1だと1m単位でスナップ移動する。
- SnapTime:
- スナップアニメーションの時間。
SnapOnReleaseがTrueの時に働く。
1だと1秒かけて移動する。
- SnapOnRelease:
- 放した時にスナップさせる。
初期設定(False)だと、Snap位置に瞬間移動する。
Trueだと、無段階に動かせる。放した時にアニメーション(Tween)が働く。
- SnapPositions(list):
- Add押すと増える。
スナップさせる地点と範囲を設定できる。
- Position:
- スナップさせる位置。
- MaxDistance:
- スナップさせる距離。(この範囲内に近づくと、スナップする。)
範囲が被っている場合の挙動は謎でした。(確実に動作させるなら、被せない方が良さそう。)
- posOffset:
- 自動。
掴んだ時の位置オフセット。
- rotOffset:
- 自動。
掴んだ時の回転オフセット。
- scaleReference:
- 自動。
掴んだ時のスケール。
- referenceParent:
- 自動。
親スロット。
使用例
- 掴めるようにするにはColliderも必要。
他のグラブ系コンポーネントは消しておきましょう。 - スライド扉を例に、RangeとOriginの解説をします。
Range(移動範囲)x軸1mなら、Origin(原点位置)から左右に-0.5~0.5mの範囲で動くという事です。
その為、スライド扉のOrigin(原点位置)は半開き状態(0.5mオフセット)の位置にすることで、扉が綺麗に開閉できるようになります。
さらに、VibrationやSnap設定を行う事でインタラクションが充実します。
その他
- UIXにもSlider<T>がある。
- Sliderを掴んでも手の中(Holderスロット)に入らないので、Grabbableとは挙動が異なります。
グラブモード「手のひら」等だと、複数人又は両手で掴むと階層を遡って掴みます。(片手で掴むと左右だけ、両手で掴むと左右上下に動かせるギミックが作れます。)
上階層を掴んでほしくない時はGrabBlockを中間の階層にアタッチします。 - 掴んでコンテキストメニュー操作「破棄」「複製」「保存」等ができます。
阻止する場合は、DestroyBlockやDuplicateBlockやGrabbableSaveBlockを自スロット又は上の階層にアタッチします。
DestroyRootをアイテムのRootにアタッチする事で、Sliderを破棄した際にアイテム毎破棄する事が可能です。
ObjectRootによって「保存」等の挙動が変化します。 - SmoothValue(WriteBack)を組み合わせれば、動きを滑らかにできます。
- GrabbableAvatarPoseFilterを組み合わせれば、アバターの手の動きを乗っ取る事ができます。
- 似たコンポーネントにJointがあります。