Programming in VRChat

VRChat でのプログラミングについて調べたことの書き溜め

PlayerMods

PlayerMods はワールドでのプレイヤーの設定を設定(変更)する機構。

プレイヤーがジャンプ出来るようにしたり、移動速度を変更できる。

使い方

  1. VRC_PlayerMods コンポーネントを任意の GameObject に追加する。
    • prefab VRCWorld を使用しているのならばワールドの特性の記述を一か所にまとめる意味で、そこに追加するのが分かりやすいだろう。
  2. isRoomPlayerMods を有効にする。
    • 追加直後のデフォルトでは無効になっているのでチェックを入れる
  3. さらにその中に具体的な設定値である“Mod”を追加する。
    • "Add Mods" ボタンでダイアログが開く。プルダウンメニューから追加したい項目を選ぶ
    • プレイヤーがワールドでジャンプできるようにするには Jump を追加する
      • jumpPower で飛び上がる量(距離?)が変わる
    • プレイヤーの移動速度を変えたい場合は Speed を追加する
      • runSpeed は走りの速度
      • walkSpeed は歩きの速度
      • strafeSpeed は(おそらく)機銃掃射時の移動速度(なんだこれ? Gun を発射しながらの移動速度か?多分今は使えない)
    • プルダウンメニュー中の他の項目は現在(2018/1 0.12.0p3)機能しない。

調査メモ

  • VRC_PlayerMods を任意の GameObject に追加した後に、さらにその中に具体的な設定値である“Mod”を追加する。
  • 具体的な Mod は以下
    • ただし現在の実装(2018/1)で有効なのは speedjump のみで他は動作しないとのこと。(新しくて使えないのではなく、古いのが残っているのだろう)
    • Jump アバターがジャンプできる量。指定が無い場合にはジャンプできない。
    • Speed アバターが移動する速さ
    • Voice ボイスチャットの届く距離
        - 参考:Voice 設定は VRC_SceneDescriptor にある。
      
    • Room Keys ワールド全体で有効なキーボード入力を特定の GameObject へ配送する定義(らしい)
    • Health プレイヤーの Health 値の初期値と、ゼロになった時の処置(だろう)
    • Gun ワールドで使われる Gun の定義(だろう)
    • Prop キーなど入力をアバターのリグに接続するもの(か?)
  • isRoomPlayerMods は、プレイヤーがワールドに入った直後に適用することを意味するらしい。
    • 何らかのトリガーによって動的に適用する場合にはこれを無効にしておく
    • という設計のつもりらしいのだが、現在(2018/1 0.12.0p3)の実装では動的に適用することは出来なかった
    • action 定義で SendRPC で AddPlayerMods custom method が追加できるのだが、動かしてみると例外が発生する。
    • VRC_PlayerMods を持つオブジェクトを SetGameObjectActive してみたり、SpawnObject してみたりとあがいてみたが上手くいかなかった。
      • すでに自分はワールドに居るので適用されないということなのだろうか、と、リスポーンしてみたが駄目。