Swivel Chair 2 - mimyquality/FukuroUdon GitHub Wiki
概要
VRChatのワールドに設置できるギミック椅子です。
以下の機能を備えています。
- 座った後の座位置調整(手動)
- 椅子のスイベル回転
- [Option]椅子のキャスター移動
- [Option]ピックアップによる椅子の運搬
旧 SwivelChair からの追加変更点として、
- スマホ版(Android/iOS)に対応しました。
- 椅子に座っている間、Sit 判定や関係するピックアップ判定を無効にします。
- キャスター移動とピックアップ運搬機能が共存可能になりました。
- 物理演算制御でキャスター移動が可能となりました。
導入手順
パッケージ内容
- スイベルチェアー2ギミック
- 各種設定済みサンプルプレハブ
使い方
Packages > Fukuro Udon > Samples > SwivelChair2 にサンプルの Prefab 各種が入っています。
Prefab を Hierarchy に置けば、椅子ギミックとして動きます。
サンプルプレハブには基本機能のみのものや、ピックアップして移動させられるもの、キャスター移動機能が設定済みのものなどバリエーションを用意してあります。必要に応じてチョイスしてください。
そのままだと仮メッシュオブジェクトのままで見栄えが悪いので、仮メッシュオブジェクトは削除し、本命の椅子メッシュオブジェクトを入れて、設置位置やコライダーの大きさ等を調整してお使いください。
[!TIP] Seat オブジェクトの子に入れると、椅子の横回転時に一緒に回転します。
※ SwivelChair2 オブジェクトの直下に入れると、椅子の横回転ギミックの影響を受けません。
操作方法 (VR)
ジャンプボタン長押しで椅子から降りる
ジャンプボタンを押す度に Input Mode 切り替え
Input Mode : Vertical の時、左サムスティック上下で座高調整、左右で横に座位置調整、右サムスティック左右でスイベル回転
Input Mode : Horizontal の時、左サムスティック上下で座深調整、左右で横に座位置調整
Input Mode : CasterMove の時、左サムスティック上下左右でキャスター水平移動、右サムスティック左右で椅子ごと左右回転
操作方法 (PCデスクトップ)
ジャンプボタン長押しで椅子から降りる
ジャンプボタンを押す度に Input Mode 切り替え
Input Mode : Vertical の時、W Sキー上下で座高調整、A Dキーでスイベル回転
Input Mode : Horizontal の時、W Sキーで座深調整、A Dキーで横に座位置調整
Input Mode : CasterMove の時、W Sキーでキャスター前後移動、A Dキーで椅子ごと左右回転
操作方法 (スマホアプリ)
ジャンプボタンをダブルタップで椅子から降りる
ジャンプボタンを押す度にInput Mode切り替え
Input Mode : Vertical の時、バーチャルスティック上下で座高調整、左右でスイベル回転
Input Mode : Horizontal の時、バーチャルスティック上下で座深調整、左右で横に座位置調整
Input Mode : CasterMove の時、バーチャルスティック上下でキャスター前後移動、左右で椅子ごと左右回転
座位置保存機能 (ver3.0.0 以降)
VRChat の Persistence 機能に対応した、 AdjustmentSync プレハブを追加しました。
Packages > Fukuro Udon > Runtime > SwivelChair2 > Prefabs に入っています。
このプレハブを Swivel Chair 2
コンポーネントの付いたオブジェクトの子に入れることで、そのスイベルチェアー2で調節した座位置が、インスタンスを跨いで保存されるようになります。
更に、 Enable Link にチェックを入れて Link Number を合わせたスイベルチェアー2同士は、調節した座位置が共有されるようになります。
例えば形が同じ複数ある椅子が一括で調整されるので、プレイヤーが椅子毎に座位置の調整をしなくて良くなります。
[!NOTE] 通信量節約のため、座位置は椅子から降りた時に保存・共有されます。
高度な使い方
Swivel Chair 2 の各コンポーネントのパラメーターについて
Swivel Chair 2
(Additional Settings)
- Pickup : 持ち運べる椅子にする時、ここに
VRC Pickup
コンポーネントをセットしておくことで、椅子に座った人が座っている間ピックアップ不可になります。誤操作防止用。 - Caster : キャスター移動機能を使う際は、ここに
SC2 Caster
コンポーネントをセットしてください。
SC2 Seat Adjuster
- Adjust Min Limit : 座位置調整範囲の下限側。(単位:ローカル座標)
- Adjust Max Limit : 座位置調整範囲の上限側。(単位:ローカル座標)
- Adjust Speed : 位置調整時の移動速度です。(単位:m/s)
- Forward Snap Threthold : 椅子のスイベル回転量がこの閾値以内の場合、強制的に真正面を向きます。(単位:度)
- Rotate Speed : スイベル回転時の回転速度です。(単位:度/s)
SC2 Input Manager
- Tooltip Animator : 入力イベントをTriggerパラメーターとして渡す Animator をセットします。一応無くても動きます。
- LongPushDuration : 椅子から降りるためのジャンプボタンの長押し判定時間。(単位:秒)
- DoubleTapDuration : 椅子から降りるためのダブルタップ受付時間。スマホモード専用。(単位:秒)
SC2 Caster
- Immobile : これが有効になっている間、キャスター移動をしなくなります。
- Move Speed : キャスター移動時の移動速度です。(単位:m/s) 物理演算制御時は力になります。(単位:N)
- Turn Speed : キャスター移動時の回転速度です。(単位:度/s) 物理演算制御時はトルクになります。(単位:Nm)
物理演算制御のキャスター移動について
SC2 Caster
と共に Is Kinematic がオフの Rigidbody
が付いている場合、キャスター移動が物理演算制御になります。
物理演算制御には、Unity の物理演算関連のコンポーネントに対する各種知識が必要になってきます。例えば、壁や床と接触するにはコライダーが必須です。
SwivelChair2withPhysicsCaster_sample プレハブでは、接地面との摩擦係数を減らすため、 Caster
コライダーには PhysicMaterial を付けています。 また、Unity 2019のうちは重心(Center of Mass)が手動設定できないため、UI レイヤー(どのレイヤーともコリジョンしない)に属したBalancer コライダーを追加する事で、低重心になるよう調節してあります。
サンプル
以下のワールドにサンプルを設置しています。
https://vrchat.com/home/world/wrld_4b7ed36e-c436-409f-9f87-8a6f4c80e79b