Transform/Interaction/Slider

Last-modified: 2025-09-18 (木) 17:13:06


Slider (スライダー)

掴んで移動させたときに動きを制御(制限)するコンポーネント


項目

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

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

AllowSteal:
他のユーザーが奪い取れるようにする。(DontDriveがTrueの時に機能する。)

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

DontDrive:
自スロットのPositionらを駆動しない。
初期設定(False)の時、掴むとPositionが駆動されます。Trueの時は書込みっぽい。

ホストがAFK(不在)だったり、一部のヘッドレスセッションでは、挙動がおかしくなるかも。
とりあえずTrueにして、様々な環境やユーザーでテストしてみましょう。
さらに、Positionを他からも制御している場合は難解です。(ローカルで動いちゃってる可能性もあるので、様々な検証が必要です。)


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

ActiveUserFilter:
物がユーザーの中にあるとき、掴めるかどうかを指定する。
(Sliderを掴んでも手の中(Holder)に入らないので、Grabbableとは挙動が異なります。)
0Disabled無効
1OnlyActiveUserユーザーの中にあるとき、そのユーザーだけ掴める。ユーザーの中にないとき、誰も掴めない。
2ActiveUserWhenPresentユーザーの中にあるとき、そのユーザーだけ掴める。ユーザーの中にないとき、誰でも掴める。
3ExcludeActiveUserユーザーの中にあるとき、そのユーザーだけ掴めない。ユーザーの中にないとき、誰でも掴める。

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:
掴んで動かした時のコントローラー振動設定。
0None
1Short
2Medium
3Long

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を中間の階層にアタッチします。
  • 掴んでコンテキストメニュー操作「破棄」「複製」「保存」等ができます。
    阻止する場合は、DestroyBlockDuplicateBlockGrabbableSaveBlockを自スロット又は上の階層にアタッチします。
    DestroyRootをアイテムのRootにアタッチする事で、Sliderを破棄した際にアイテム毎破棄する事が可能です。
    ObjectRootによって「保存」等の挙動が変化します。
  • SmoothValue(WriteBack)を組み合わせれば、動きを滑らかにできます。
  • GrabbableAvatarPoseFilterを組み合わせれば、アバターの手の動きを乗っ取る事ができます。
  • 似たコンポーネントにJointがあります。