Programming in VRChat

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

about

VRChat におけるプログラミングがらみの情報を調べたものを書き留め、公開しておく場所としてこのブログを作りました。

2023/1 追記

このブログは 2018年から2019年ごろにかけて書いた記事が多く含まれます。 現在は古くなって使えない内容になっている部分もあります。 最新の情報をあわせて確認するようにしてください。

最近はブログとして記事を整えるよりも Twitter で時々の最新情報を伝えることが多くなっています。 長く続いたスレッドの例:

Topics

vrcprog.hatenablog.jp

Sub Inspector :

昔作ってたもの: Unity Editor 上で VRChat をエミュレートしてワールド作成のデバッグを出来るようにするツール

このブログのカテゴリ(記事分類)

index


よく使われるコンポーネント一覧(短め紹介)

  • VRC_AudioBank / 複数の AudioClip を保持し、それらを再生する
  • VRC_AvatarDescriptor / アバターにするオブジェクトに付加して各種設定値を記述する場所
  • VRC_AvatarPedestal / アバターを展示する台座(そのアバターに切り替える機能つき)
  • VRC_DestructibleStandard / オブジェクトにヘルス値の増減の仕組みを追加する
  • VRC_IKFollower / アバター作成で、ワールド座標系が必要な部分に付ける
  • VRC_MirrorReflection / 鏡面の反射表現を作る
  • VRC_ObjectSync / マルチプレイでワールドの状態がプレイヤー間で同じになるように
  • VRC_Panorama / パノラマ画像(全天球画像)テクスチャを表示する
  • VRC_Pickup / オブジェクトをプレイヤーがつかめる(持てる)ようにする
  • VRC_PlayerMods / プレイヤーのワールドでの特性を設定(変更)する
  • VRC_PortalMarker / 他のワールドへ移動するポータルを出現させる
  • VRC_SceneDescriptor / ワールドについての設定情報を記載する場所
  • VRC_Station / 椅子や乗り物など、プレイヤーを通常の移動操作から一次的に切り離す
  • VRC_SyncVideoPlayer / 動画をプレイヤー間で同期させながら表示する
  • VRC_Trigger / 発生する事象(トリガー)への反応動作を設定・実行する
  • VRC_UiShape / Unity の UI 部品である Canvas を使えるようにする
  • VRC_WebPanel / VRChat 内で使用できる Web ブラウザ
  • VRCPipelineManager / アップロードするデータを生成(ビルド)する際の情報管理を行う

プレハブ(prefab)一覧

  • Worlds/
    • VRCAvatarPedestal アバターの展示・切り替え台座 (⇒VRC_AvatarPedestal)
    • VRCChair 椅子 (⇒VRC_Station)
    • VRCMirror 鏡 (⇒VRC_MirrorReflection)
    • VRCPanorama パノラマ画像表示 (⇒VRC_Panorama)
    • VRCPortalMarker ポータルを設置 (⇒VRC_PortalMarker)
    • VRCVideoSync 動画再生 /(⇒VRC_SyncVideoPlayer)
    • VRCWorld / ワールド(シーン)の基本設定 /(⇒VRC_SceneDescriptor)
  • Examples/
    • Ball / サンプルシーンの中で使われている
    • MouseCursor / VRC_WebPanel で使うもののサンプル(と思われ)
  • Dependencies/ SDK が内部で使っているもの(とおもわれ)
    • VRC_PlayerVisualDamage VRC_CombatSystem のダメージ表現用のプレハブ(か?)
    • VRCCam / アップロード時に登録するイメージを撮影するカメラ
    • VRCProjectSettings Unity のプロジェクト設定に範囲させる値を保持している(のか?)
    • VRCSDKAvatar / アバターをアップロード時に動作する画面
    • VRCSDKWorld / ワールドをアップロード時に動作する画面

トリガー 一覧(役割で分類)

(十分に検証できていない部分もあるので、間違った記述を含むかもしれません。 おかしなところが有ったら教えていただけると助かります。)

  • VRChat の基礎的な機構
    • トリガーシステム関連
      • Custom / カスタム・トリガー(独自のトリガーを定義できる仕組み)
      • Relay / 詳細不明 要調査
    • プレイヤー関連
      • OnNetworkReady / 自分がワールドへ入り情報のロードが完了すると発生
      • OnPlayerJoined / 他のプレイヤーがワールドに入ってくると発生
      • OnPlayerLeft / 他のプレイヤーがワールドから出ていくと発生
    • マルチプレイでの同期関連
      • OnOwnershipTransfer / オブジェクトの所有者が変化すると発生
    • 時間経過
      • OnTimer / 指定時間が経過すると発生
  • プレイヤーの操作について
    • 拾い上げる(VRC_Pickup)
      • OnPickup / オブジェクトを拾い上げた時に発生
      • OnPickupUseDown / 持っている状態で「使う」ボタンを押した時に発生
      • OnPickupUseUp / 持っている状態で「使う」ボタンを離した時に発生
      • OnDrop / オブジェクトを離した時に発生
    • オブジェクトに働きかける
      • OnInteract / インタラクト操作をした時に発生
    • キー入力(キーボード、VRコントローラともに)
      • OnKeyDown / キーを押した時に発生
      • OnKeyUp / キーを離した時に発生
  • Unity に元からある仕組みに関連づくもの
    • GameObject 関連 / VRC_Trigger が付加されている GameObject の状態変化
      • OnEnable / GameObject が有効になった時に呼ばれる
      • OnDisable / GameObject が無効になった時に呼ばれる
      • OnSpawn / GameObject が生成された時に呼ばれる
      • OnDestroy / GameObject が破棄される時に呼ばれる
    • 物理シミュレーション、オブジェクトの衝突
      • OnEnterTrigger / トリガー設定されたコライダーの重なりが始まった時に発生
      • OnExitTrigger / トリガー設定されたコライダーの重なりが終わった時に発生
      • OnEnterCollider / 他のオブジェクトのコライダーへのめり込みが始まった時に発生
      • OnExitCollider / 他のオブジェクトのコライダーへのめり込みが終わった時に発生
      • OnParticleCollision / パーティクルがコライダーにヒットした時に発生
      • OnAvatarHit / アバターとの衝突時に発生 (何か特別なことはあるのか要検証)
  • 特定のコンポーネントに関連づくもの
    • VRC_Station の変化 / VRC_Station を備える場合にのみ表示される
      • OnStationEntered
      • OnStationExited
    • VRC_SyncVideoPlayer の変化
      • OnVideoStart
      • OnVideoEnd
      • OnVideoPlay
      • OnVideoPause
    • VRC_DataStorage の変化
      • OnDataStorageChange

アクション 一覧(役割で分類)

  • VRChat の基礎的な機構
    • トリガーシステム関連
    • プレイヤー関連
      • TeleportPlayer
  • Unity に元からある仕組みに関連づくもの
    • GameObject関連
      • SetGameObjectActive
      • SpawnObject
      • DestroyObject
      • SetComponentActive
    • 物理シミュレーション、オブジェクトの衝突
      • SetLayer
      • AddVelocity
      • SetVelocity
      • AddAngularVelocity
      • SetAngularVelocity
      • AddForce
    • アニメーション
      • AnimationTrigger
      • AnimationBool
      • AnimationFloat
      • AnimationInt
      • AnimationIntAdd
      • AnimationIntSubtract
      • AnimationIntMultiply
      • AnimationIntDivide
      • PlayAnimation (VRChat 技術メモ帳に寄稿
    • その他 Unity の機能制御
      • SetMaterial
      • AudioTrigger
      • SetUIText
      • SetParticlePlaying
      • MeshVisibility / (インスペクタをデバッグモードにした時のみ設定可能)
  • 特定のコンポーネントに関連づくもの
    • VRC_WebPanel
      • SetWebPanelURI
      • SetWebPanelVolume
    • VRC_CombatSystem, VRC_DestructibleStandard
      • AddHealth
      • AddDamage

コンポーネント一覧(詳しめ)

  • 記載内容
    • 実用されるものに限定
    • 簡単説明つき
    • RPC も一覧 (RPCの説明もおいおい付けたい)
    • A-Z 順
  • ここでの表記:

    • [RPC]: SendRPC アクションによって実行できる、コンポーネントの機能
    • [Trigger]: コンポーネントで起きた事象によって Custom 定義したトリガーを呼ぶ機構
    • [Method]: SendRPC で一覧には出てこないが、呼び出せるコンポーネントの機能
      • uGUI を通したり、プレハブやサンプルなどで見つけたもの
    • [Prefab]: プレハブ
  • PipelineManager

  • VRCPipelineManager
    • アップロードするデータを生成(ビルド)する際の情報管理を行う(らしい)
    • ワールド(およびアバター)の ID を保持している。参照したり書き換えたりできる。
  • VRC_AudioBank
    • 複数の AudioClip を保持し、それらを再生する
    • [RPC] Play(int idx)
    • [RPC] Stop
    • [RPC] PlayNext
    • [RPC] Shuffle
    • (Trigger は、このコンポーネントに custom trigger を登録する方式)
    • [Trigger] OnPlay
    • [Trigger] OnStop
    • [Trigger] OnChange
  • VRC_AvatarDescriptor
    • アバターにするオブジェクトに付加して各種設定値を記述する場所
  • VRC_AvatarPedestal
    • アバターを展示する台座(そのアバターに切り替える機能つき)
    • [RPC] SwitchAvatar(string id)
    • [RPC] SetAvatarUse
    • [Prefab] VRCAvatarPedestal
  • VRC_CombatSystem
    • プレイヤーにヘルス値の仕組みを追加し、戦闘ゲームを作れるようにする
    • 現在(VRCSDK-2018.05.24.18.24)一部を除き動作しない
  • VRC_CustomRendererBehaviour
    • オブジェクトの描画の振る舞いを変化させる
    • 現在はライティングに関する1項目のみ
  • VRC_DataStorage
  • VRC_DestructibleStandard
    • オブジェクトにヘルス値の増減の仕組みを追加し、破壊表現を作れるようにする
    • (Trigger は、このコンポーネントに custom trigger を登録する方式)
    • [Trigger] OnDamaged
    • [Trigger] OnDestructed
    • [Trigger] OnHealed
    • [Trigger] OnFullHealed
  • VRC_EventHandler
    • VRC_Trigger が内部的に利用する
    • SDK 利用者が直接触る機会は無い
  • VRC_IKFollower
    • アバター作成で、ボーン移動に場所は追従しつつワールド座標系が必要な部分に付ける
  • VRC_MidiNoteIn
    • MIDI ノート・メッセージ(音を鳴らす、音を止める)の入力によりアクションを実行する
    • (キー入力での OnKeyDown, OnKeyUp トリガーと同じようなもの)
  • VRC_OscButtonIn
    • OSC (Open Sound Control)
  • VRC_MirrorReflection
    • 鏡面の反射表現を作る
    • [Prefab] VRCMirror
  • VRC_ObjectSync
    • マルチプレイ環境で各種の値の同期を行い、ワールドの状態がプレイヤー間で同じになるようにする
    • [RPC] EnableKinematic / Rigidbody の Is Kinematic を同期的動的変更する
    • [RPC] DisableKinematic
    • [RPC] EnableGravity
    • [RPC] DisableGravity
    • [RPC] ReapObject / (なぞ)
    • [RPC] TeleportTo / オブジェクトを指定ロケーションへ移動する
      • ローテーションが意図しない状況になる不具合あり
    • [RPC] TakeOwnership / オブジェクトのオーナーになる
      • 動作させる条件が今一つはっきりしない
  • VRC_Panorama
    • パノラマ画像(全天球画像)テクスチャを表示する。切り替え機能付き。
    • VRCPanorama プレハブを参照。
    • [RPC] NextPano / 一覧に出てこないが存在するらしい(要検証)
    • [RPC] PrevPano
    • [RPC] ShowPanoAt
    • [Prefab] VRCPanorama
  • VRC_Pickup
    • オブジェクトをプレイヤーがつかめる(持てる)ようにする
    • [RPC] Drop(int)
    • [RPC] PlayHaptics
  • VRC_PlayerMods
    • プレイヤーのワールドでの特性を設定(変更)する
    • [RPC] AddPlayerMods / 動作しない?(2018/1 0.12.0p3)
    • [RPC] RemovePlayerMods / 同上
  • VRC_PortalMarker
    • 他のワールドへ移動するポータルを出現させる
    • [Method] RefreshPortal
    • [Prefab] VRCPortalMarker
  • VRC_SceneResetPosition / noted Legacy in v1.0 doc
    • 指定位置(Transform)にオブジェクトを移動する
    • Legacy に記載されているが VRC_ObjectSync の TeleportTo に不具合があるために有用(ver 2018.1.3)
    • [Method] ResetPosition
  • VRC_SceneDescriptor
    • ワールドについての設定情報を記載する場所
    • (追加すると VRCPipelineManager も合わせて追加される。シーン中の任意のオブジェクトの一か所に付ける必要がある)
    • [Prefab] VRCWorld
  • VRC_Station
    • 椅子や乗り物など、プレイヤーを通常の移動操作から一次的に切り離しオブジェクトに関連付ける仕組み
    • [RPC] UseStation
    • [RPC] ExitStation
    • [Prefab] VRCChair
  • VRC_SyncVideoPlayer
    • 動画をプレイヤー間で同期させながら表示する
    • 一部の RPC が "Events from Scene" メニューに現れない不具合あり
    • [RPC] AddURL(string url)
    • [RPC] Clear
    • [RPC] Next
    • [RPC] Pause
    • [RPC] Play
    • [RPC] PlayIndex(int index)
    • [RPC] Previous
    • [RPC] Shuffle
    • [RPC] SpeedDown
    • [RPC] SpeedUp
    • [RPC] Stop
    • [Trigger] OnVideoEnd
    • [Trigger] OnVideoPause
    • [Trigger] OnVideoPlay
    • [Trigger] OnVideoStart
    • [Prefab] VRCVideoSync
  • VRC_SyncVideoStream
    • 動画をプレイヤー間で同期させながら表示する
    • VRC_SyncVideoPlayer に比べ、同期方法に改良がある、出力のコンポーネントが別になった
    • [RPC] AddURL(string)
    • [RPC] Clear()
    • [RPC] FastForwardSeconds(float)
    • [RPC] Next()
    • [RPC] Pause()
    • [RPC] Play()
    • [RPC] PlayIndex(int)
    • [RPC] Previous()
    • [RPC] Resync()
    • [RPC] RewindSeconds(float)
    • [RPC] SetSyncMinutes(float)
    • [RPC] SetSyncType(Normal|LiveStream|Karaoke)
    • [RPC] Shuffle()
    • [RPC] Stop()
  • VRC_Trigger
    • 発生する事象(トリガー)への反応動作を設定・実行する
  • VRC_UiShape
    • Unity の UI 部品である Canvas を使えるようにする
  • VRC_VideoScreen
    • VRC_SyncVideoStream と共に使う、映像出力
  • VRC_VideoSpeaker
    • VRC_SyncVideoStream と共に使う、オーディオ出力
  • VRC_VisualDamage
    • VRC_CombatSystem の VisualDamagePrefab に指定するオブジェクトで使い、ダメージ表現の制御を行う(たぶん)
    • [RPC] SetDamagePercent(float damagePercent)
  • VRC_WebPanel
    • VRChat 内で使用できる Web ブラウザ
    • [Action] SetWebPanelURI(string URI)
    • [Action] SetWebPanelVolume(float Volume)
    • [RPC] WebPanelBackward
    • [RPC] WebPanelForward
    • [RPC] WebPanelReload

実用されないコンポーネント (A-Z order)

存在しているが実用されないコンポーネントの一覧

  • 状況としてはさまざまだが、今後どう変化するのか分からないので一緒に記載しておく
  • 状況のパターンとしては以下のようなものがある
    • ドキュメントで Unused とされているもの(用意されているが現在は使われない)
    • ドキュメントで Legacy とされているもの(以前は使われたが新規に作る際には不要なもの)
    • ドキュメントに記載はあるものの、説明不足等で使い方が分からないもの
    • ドキュメントに記載がないもの
  • ごく一部 Legacy とされていても活用意義があるものは、ここに収めず実用される方の一覧に記載

  • VRC_AddDamage / noted Legacy in v1.0 doc

  • VRC_AddHealth / noted Legacy in v1.0 doc
  • VRC_AvatarVariations
    • アバターについてバリエーションを定義するもの、らしい
    • 一部のマテリアルを差し替えたものを定義するらしい。負荷対策?
    • VRCSDK-2018.04.25.09.19 で追加。2018/5/3現在ドキュメント無し
  • VRC_Behaviour / noted Unused in v1.0 doc
  • VRC_Editor / noted Unused in v1.0 doc
  • VRC_EventDispatcherLocal / noted Unused in v1.0 doc
  • VRC_GunStats
    • VRC_CombatSystem と共に使う銃器、のようだが動かない(VRCSDK-2018.05.24.18.24)
    • ドキュメントにも記載なし
  • VRC_JukeBox
    • Audio Clip を複数保持して再生するもの。
    • VRC_AudioBank で代替できるし、ドキュメントに記載なしで存在理由不明。
  • VRC_KeyEvents
    • marked as "Please use VRC_Trigger instead"
    • VRC_Trigger の OnKeyDown, OnKeyUp trigger に移行したと思われ
    • ドキュメントに記載なし
  • VRC_MetadataListener
    • ドキュメントに記載なし
  • VRC_MirrorCamera
    • Camera が映すレイヤーを mirror と同じものにする
    • とドキュメントにあるのだが VRC_MirrorReflection はレイヤーを選べるので意味不明。要検証
  • VRC_NpcApi / noted Legacy in v1.0 doc
  • VRC_NPCSpawn / noted Legacy in v1.0 doc
  • VRC_Label
    • 機能不明。
  • VRC_ObjectApi
    • 公式ドキュメントによれば、VRC_Station によって制御されるオブジェクトを作るためのもの
    • だが http://vrchat.wikia.com/wiki/VRChatSDK#VRC_ObjectApi によれば VRC_ObjectSync によって代替されたとのこと
    • ただしドキュメントで Legacy に分類されてはいない(2018/6/3)
  • VRC_ObjectSpawn / noted Legacy in v1.0 doc
    • VRC_Trigger SpawnObject アクションで代替された?
  • VRC_PhysicsRoot / noted Legacy in v1.0 doc
    • VRC_Pickup の PhysicalRoot によって代替された?
  • VRC_PlayerApi / no doc v1.0
    • ワールドに居る個々のプレイヤーを表しているようだ。インスタンスの取得方法が不明。
  • VRC_PropApi
    • プレイヤーに追加装備するオブジェクトを作る
    • VRC_PlayerMods の prop で PropPrefab に指定するオブジェクトに付ける。
    • Legacy とされているが表示動作はする。新規代替は知られていない。安定動作しないかもしれない。要調査。
  • VRC_PropController
    • VRC_Station を使用している間プレイヤーを動かすキー入力などを定義する、らしいが使えない
  • VRC_RainObject / noted Legacy in v1.0 doc
  • VRC_ReflectionReference / noted Unused in v1.0 doc, appears only in v1.0 doc
  • VRC_SceneSmoothShift / noted Legacy in v1.0 doc
  • VRC_SerializableBehaviour / noted Unused, "Reference script" in v1.0 doc
  • VRC_SlideShow / noted Legacy in v1.0 doc
  • VRC_SpecialLayer / noted Legacy in v1.0 doc
  • VRC_StaticReference / noted Unused in v1.0 doc, appears only in v1.0 doc
  • VRC_StationApi
    • VRC_Station を利用する機構のようだが、詳細不明
  • VRC_StationInput
    • VRC_Station をプレイヤーが使用している時の入力定義のようだが、詳細不明
  • VRC_StereoObject / noted Legacy in v1.0 doc
  • VRC_SyncAnimation / noted Legacy in v1.0 doc
    • VRC_ObjectSync がアニメーションの同期も扱う(ので不要になった?)
  • VRC_TimedEvents / noted Legacy in v1.0 doc, marked as "use VRC_Trigger instead"
    • VRC_Trigger OnTimer トリガーで代替されたのだろう
  • VRC_TriggerColliderEventTrigger / noted Legacy in v1.0 doc, marked as "use VRC_Trigger instead"
    • VRC_Trigger OnEnterTrigger トリガーで代替されたのだろう
  • VRC_TutorialAction / noted Unused in v1.0 doc
  • VRC_TutorialAreaMarker / noted Unused in v1.0 doc
  • VRC_UseEvents / noted Legacy in v1.0 doc, marked as "use VRC_Trigger instead"
  • VRC_Water / noted Unused in v1.0 doc
  • VRC_YouTubeSync / marked as "deprecated", "use the VRC_SyncVideoPlayer"
  • VRCDebugCommand / noted Unused in v1.0 doc
  • VRCProjectSettings / no doc
    • SDK で内部的に使われるもの?
  • VRCTriggerRelay / noted Unused in v1.0 doc
    • VRC_Trigger の Relay トリガーと関係していそうだが不明