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で描画される大きさに影響を受けない。よって外形を見た目のデザインにうまくはまるようにする調整と、座り位置の調整は個別に行える(行う必要がある)。
  • ハイライトの形状を変えたい場合
    • 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を有効にした場合、プレイヤーは立った状態になる


  • Custom animation overrideを上書きするにはSeatedにチェックが入っている必要がある。

参考資料

備考

掴める椅子の同期とObjectSync
  • 空の親、取っ手、椅子の3代構造の場合、親と子にObjectSyncつけるとマルチでも同期する
    • 3代になっているのは取っ手と椅子のスケールが異なるので掴んで傾けると伸び縮みしてしまうため
    • 先にワールドに入っていた人が動かした椅子は、あとから入ってきた人には動かせない模様(要検証)

コメント

  • アバターに椅子を仕込めると聞いて試したのですが、triggerがアバターに対応しておらず、triggerとevent handleを外してアップしたところ…椅子に座ることが出来ても立てませんでした stationの設定を弄っても解決できませんでした。 --- 匿名希望 (2018/05/01 19:41:24)
  • 現状皆その方法のようです。椅子を消して強制的に下ろすんだったかと --- (2018/05/02 01:58:14)
  • 上記「アバターに椅子を仕込める」について補足。開発元によればこれは不具合(意図しない将来仕様の流出)とのこと。VRChat 2018.1.2 のリリースノート参照。 --- (2018/07/28 07:50:31)
  • アバターに椅子を仕込める機能が正式に実装されたのでまた議論開始かな --- (2018/12/25 01:31:15)
  • いろいろ修正されて挙動が変わっているみたいなので調査が必要そう。 --- (2018/12/25 13:05:09)
  • 「椅子に座る際の選択時のハイライト(水色の縁取り)について」ですが、これはMesh Rendererである必要があり、Skinned Mesh Rendererは無視されます。 --- 100の人 (2019/07/31 14:18:49)
  • アバターに追加できるVRC_Stationは最大6つで、表示・非表示に関わらず先頭から7つ目以降が無効化されます。 --- 100の人 (2019/09/19 10:59:46)

コメントを投稿するには画像の文字を半角数字で入力してください。

投稿済みコメントに返信する場合はコメントを選んでから投稿してください。


画像認証

タグ・カテゴリ: カテゴリ-Components

  • 最終更新:2019-09-02 23:04:42

このWIKIを編集するにはパスワード入力が必要です

認証パスワード