VRC_Station
プレイヤーのアバターを通常の移動操作から一時的に切り離して、オブジェクトに留めるコンポーネント。
SDK に含まれる椅子のプレハブ VRCChair が典型的な使い方。
公式ドキュメント: https://docs.vrchat.com/docs/vrc_station
tips
- 椅子に座る際の選択時のハイライト(水色の縁取り)について
- VRC_Stationが付いているオブジェクトの子にある描画されるオブジェクトの外形と同じになる。この外形はRendererで決まる。(Rendererが付いていればマテリアルが透明でもいい・逆にColliderがあってもRendererがなければダメ)
- また、Inspectorの右上にある▼(□Staticの右)をクリックして表示されるBatching Staticが無効になっている必要がある。
- 座り姿勢になる位置は Station の Enter Player Location (無指定時はStationそのものの位置)のみで決まっている。見た目とは異なりこのRendererで描画される大きさに影響を受けない。よって外形を見た目のデザインにうまくはまるようにする調整と、座り位置の調整は個別に行える(行う必要がある)。
- VRC_Stationが付いているオブジェクトの子にある描画されるオブジェクトの外形と同じになる。この外形はRendererで決まる。(Rendererが付いていればマテリアルが透明でもいい・逆にColliderがあってもRendererがなければダメ)
- ハイライトの形状を変えたい場合
- Staticにチェックしていない状態なら、座面用のCubeに透明なマテリアルを設定するとハイライトがそのCubeの形状になる
- Staticにチェックが入っている場合、Batching Staticのチェックを外すとハイライトが任意のメッシュ形状になる
- VRC_Stationを使ってプレイヤーを移動させたりしたい場合、Player mobilityをImmobilize For Vehicleに変更にするとよい。(がくつきがなくなる)
- VRC_Stationのついたオブジェクトの子オブジェクトにTriggerを付けて着席するとハイライトされなくなりInteractできなくなるので、CanUseStationFromStationのチェックをオンにするとInteractできるようになる
発展的活用
- Animation Controller (optional)にCustom overrideを入れるとアニメーションが書き換えられる(特に、Idleにアニメーションを入れることで座っている状態も書き換え可能)。Emoteやcusotm overrideもstationにenterしている間だけCustom override に入っているものを付与できる。ただし、各アバターによるボーンの名前などによってアニメーションが変化するかは不明。
- 全身うごくアニメーションを入れた場合、VRモードのプレイヤーのトラッカーは有効で、頭と両手の先の動きはプレイヤー側が優先される。
- VRIK.EnabledをdisableにしたパラメータをいれたIdleアニメーションを上書きすることでHMDやコントローラのトラッキングを外したIdle Animationを実行できる。
- アバターを傾けるのに使える
- 傾いていない station に座らせた後で、station を傾けた場合には素直に予想されるようにアバターは傾く。応用: 寝られるベッド
- この使い方をする場合、Station Enter Player Location の座標のワールドに対する回転(Rotation)はゼロにしておく。そうでない場合、VR モードでアバターと視点のズレが発生する。 https://twitter.com/butadiene121/status/1022893968961331200
- あらかじめ傾いた station を使うと奇妙な姿勢になったりVRモードでの視点が遊離したりして面白いのではあるが、実用的な使い方は見つかっていない。 https://twitter.com/butadiene121/status/979254394641203200
- 現状アバターを傾けられるのはstationのみ?
仕様・挙動
- stationにenterしているときにstationをoffにするとstationから出られなくなる。再びonにすると出られる。
- ObjectSyncがついてないオブジェクトに座ると、座ったプレイヤーのアバターの表示位置が同期されなくなる。(それぞれのクライアントでのstationの位置にアバターが表示されるようになる。exitすれば元に戻る。つまり station には通常のアバターの位置制御を一時的に無効化して、stationの位置に依存させる機能があるようだ) 参考: https://twitter.com/zi_zi_neet/status/970320361823678464
- Stationを持ったオブジェクトを非アクティブにしても別オブジェクト等でSendRPC(UseStation)を発動すると非アクティブのStationに座れてしまう
- 着座に際して、VRモードにおいてはプレイヤー自身のプレイエリアにおける頭のトラッキング(初期位置からの移動量と向き)が優先される。また、着座中の移動量と向きは保存され、Exitpointに反映される。
- MobileはSeatedを無効にし、Disable Station Exitを有効にした場合のみ機能する。
参考: https://twitter.com/butadiene121/status/967192028240003072- Seatedを無効にするとexit後に身動きが取れなくなる不具合がある。この回避として、Disable Station Exitを有効にしておき(キャラクターの移動操作でなく)何らかのトリガーを使ってExitStationするようにし、直後に別途のSeatedが有効なVRC_StationにUseStationさせるという方法がある。ただし、視点が正しく戻らなくなるので二番目のstationからのExitStationまでを連続して行ってはいけない。自力で降りること。https://twitter.com/butadiene121/status/984032980866945025
- 遷移前の椅子にはCanUseStationFromStationをオンにしないと遷移できない場合がある
- 二番目の椅子に直接座れないようにするためには、VRC_Triggerを非アクティブにしておくと良い(コンポーネントを削除すると座れてしまう)
- Seatedを無効にし、Disable Station Exitを有効にした場合、プレイヤーは立った状態になる
- アニメーションで移動させるオブジェクトの子に VRC_Station を付けると、降りた時に意図しない位置にプレイヤーが移動する(飛ばされる)不具合がある。
- https://vrchat.canny.io/bug-reports/p/exiting-an-animated-vrcstation-rarely-works
- タイマーを使って間接的に TeleportPlayer でプレイヤーを再度移動させる、という回避策がある。 https://twitter.com/VoxelKei/status/993817333301850113
- Custom animation overrideを上書きするにはSeatedにチェックが入っている必要がある。
参考資料
- http://vrcprog.hatenablog.jp/entry/component-Station
概要: 仕様・挙動の詳細 - http://vrcprog.hatenablog.jp/entry/recipe-movable-chair
概要: 動かせる椅子の実装例 - https://twitter.com/butadiene121/status/967192028240003072
概要: Player Mobilityの応用例 - https://twitter.com/naqtn/status/1032089160062910464
ExitStation時の挙動 - https://vrcat.club/threads/vrchat-customizable-fixed-chair.2546/
挙動を改良したprefab
備考
掴める椅子の同期とObjectSync
- 空の親、取っ手、椅子の3代構造の場合、親と子にObjectSyncつけるとマルチでも同期する
- 3代になっているのは取っ手と椅子のスケールが異なるので掴んで傾けると伸び縮みしてしまうため
- 先にワールドに入っていた人が動かした椅子は、あとから入ってきた人には動かせない模様(要検証)
コメント
タグ・カテゴリ: カテゴリ-Components
- 最終更新:2019-09-02 23:04:42