Transform/Interaction/Joint

Last-modified: 2026-06-13 (土) 13:46:21


Joint (ジョイント)

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


項目

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

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

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

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

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

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


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

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

CustomCanGrabCheck:
???

_grabber:
自動。
手の掴むヤツ。

(掴んだユーザーのグラバーが自動的に設定される。上級者向けですが、Flux等で設定する事も可能です。)

_holdSlot:
自動。
手の掴むヤツのスロット。(放しても残るので、最後に掴んだ人が分かる。)

_pos:
自動。
無。

_rot:
自動。
自スロットのRotationを駆動。

_scl:
自動。
無。

__legacyActiveUserRootOnly:
???

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

MaxSwing:
特定の軸で振り動かす最大量。(0~180)
コントローラーのスティックのような挙動です。

例えば90だと±90°ではなく、±180°です。


MaxTwist:
特定の軸で捻る最大量。(0~180)
開き戸のような挙動です。

Axis:
回転軸を指定する。

0で無視、1で指定。


TwistReferenceAxis:
捻り軸。

とりあえず、Axisと異なる軸を1にしておくと良い感じ。


PositionTwistThresholdAngle:
???(説明が難しい。自分で試してネ。)

VibrationAngle:
振動角度。
0だと掴んでいる間、ずっと振動し続ける。
1だと1°回転する度に1回振動する。

VibrationPreset:
掴んで動かした時のコントローラー振動設定。
0None
1Short
2Medium
3Long

SnapIncrement:
スナップ値。
0だと無段階。
1だと1度単位でスナップ回転する。

SnapTime:
スナップアニメーションの時間。
SnapOnReleaseがTrueの時に働く。
1だと1秒かけて回転する。

SnapOnRelease:
放した時にスナップさせる。
初期設定(False)だと、Snap角度に瞬間移動する。
Trueだと、無段階に回転できる。放した時にアニメーション(Tween)が働く。

SnapInterpolationCurve:
スナップ時のトゥイーン(自動補完アニメーション)の種類を選択できる。
2026.6.12.557で追加された新機能。以前のトゥイーンはSineだけだった。(issue #5087)
0Linearリニア
1Sineサイン
2Cosineコサイン
3Smoothスムーズ
4Smootherスムーザー
5SineIn
6SineOut
7SineInOut
8QuadradicInクアドラティック(二次)
9QuadradicOut
10QuadradicInOut
11CubicInキュービック(三次)
12CubicOut
13CubicInOut
14QuarticInクォーティック(四次)
15QuarticOut
16QuarticInOut
17QuinticInクインティック(五次)
18QuinticOut
19QuinticInOut
20ExponentialInエクスポネンシャル(指数)
21ExponentialOut
22ExponentialInOut
23CircularInサーキュラー(円形)
24CircularOut
25CircularInOut
26ReboundInSmallリバウンド(反動) Backともいう
27ReboundOutSmall
28ReboundInOutSmall
29ReboundInLarge
30ReboundOutLarge
31ReboundInOutLarge
32ElasticInSmallエラスティック(弾性)
33ElasticOutSmall
34ElasticInOutSmall
35ElasticInLarge
36ElasticOutLarge
37ElasticInOutLarge
38BounceInバウンス(弾む)
39BounceOut
40BounceInOut


SnapOrientations(list):
Add押すと増える。
スナップさせる角度と範囲を設定できる。

Orientation:
スナップさせる角度。

MaxAngle:
スナップさせる角度。(この範囲内に近づくと、スナップする。)
範囲が被っている場合の挙動は謎でした。(確実に動作させるなら、被せない方が良さそう。)


origRotation:
自動。
???

rotReference:
自動。
???

dirReference:
自動。
???

twistReference:
自動。
???

usePositionTwist:
自動。
???


使用例

  • 掴めるようにするにはColliderも必要。
    他のグラブ系コンポーネントは消しておきましょう。
  • 開き戸(90°開閉)を例に、MaxTwistの解説をします。
    MaxTwistが45なら、原点角度から-45~45°の範囲で回転するという事です。
    その為、開き戸の原点角度は半開き状態(45°オフセット)の角度にすることで、綺麗に開閉できるようになります。
    親又は子スロットを作り、その角度オフセットするのが簡単です。
    さらに、VibrationやSnap設定を行う事でインタラクションが充実します。


その他

  • Jointを掴んでも手の中(Holderスロット)に入らないので、Grabbableとは挙動が異なります。
    グラブモード「手のひら」等だと、複数人又は両手で掴むと階層を遡って掴みます。(片手で掴むと左右だけ、両手で掴むと左右上下に回転するギミックが作れます。)
    上階層を掴んでほしくない時はGrabBlockを中間の階層にアタッチします。
  • 掴んでコンテキストメニュー操作「破棄」「複製」「保存」等ができます。
    阻止する場合は、DestroyBlockDuplicateBlockGrabbableSaveBlockを自スロット又は上の階層にアタッチします。
    DestroyRootをアイテムのRootにアタッチする事で、Jointを破棄した際にアイテム毎破棄する事が可能です。
    ObjectRootによって「保存」等の挙動が変化します。
  • SmoothValue(WriteBack)を組み合わせれば、回転を滑らかにできます。
  • GrabbableAvatarPoseFilterを組み合わせれば、アバターの手の動きを乗っ取る事ができます。
  • 似たコンポーネントにSliderがあります。
  • KnobControlと組み合わせると、回転量をfloatに変換できます。

  • このコンポーネントは素直に動いてくれないので厄介です。
    しかし、一工夫するだけで素直な挙動になります。その技を以下に記します。(Twistに効果的です。)
  1. 普通に開き戸やハンドル等を作ります。(Axis=Y軸で解説します。)
  2. JointがあるスロットのY座標を約1~2mずらす。(通常は+方向へオフセットする。)
  3. 子スロット(MeshRendererCollider等が入っている。)を逆方向にずらして、元の見た目に戻す。
    以上です。
    このように、Jointのみを回転軸上空に配置するだけで、劇的に挙動が改善します。