Programming in VRChat

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

ProtectCameraFromWallClip

概要 あるオブジェクトを一定間隔で追跡(フォロー)するカメラにおいて、 オブジェクトとカメラの間に障害物が入らないように、 カメラとオブジェクトとの距離を一時的に縮めるカメラ位置制御をおこなうスクリプト。 (Unity Standard Asset / Cameras) 機…

Unity の VR でのディスプレイに近いあたりの仕様について調査

(いまいちまとまりのないタイトル…) Unity の VR 仕様まわり Unity チュートリアルより VRでのユーザーインターフェース - 「ワールドスペースに UI を置け」という方針とのこと 理由は、人間の眼は近過ぎる物には焦点を合わせることができないことに加え…

Vive での移動とジェスチャーの変更(VRChat 0.12.0p13)

運営Discord の japanese チャンネルに私が投稿したものをWeb検索に引っかかるようにするために転載します。(小改編あり) VRChat 0.12.0p13 リリースノート のViveコントローラの部分訳してみました。原文に意味を取りにくいところがあるので、訳として正…

ワールドにカメラを置き、撮す映像を写す面を作る

要するに VRChat 内にカメラとその表示モニターを作る方法。 これは基本的には VRChat は関係せず一般的な Unity の機能の範囲で実現可能な内容ですが、 多くの人が作りたくなるモノであるように思うので記事にしてみます。 レシピ ランタイムに書き換えられ…

VRコントローラ・ボタンのジョイスティック・ボタンへの対応付け

概要 VRモードで使用するコントローラ上のボタンはジョイスティックのボタンに対応付けられていて、 キーボード入力として OnKeyDown および OnKeyUp トリガーで取り扱えます。 対応づけ 下記 Unity マニュアルの中で Unity Button ID と表記してある数値が…

デスクトップモードでマウス操作できなくなる不具合と回避

(公式 Discord #japanese 2018/2/20 PM8付近の話題より) 発生条件: VRChat 動作開始時に他アプリのウインドウでマウス操作 現象: VRChat は正常にマウス操作で動かせず、他のアプリでもマウスカーソルが固定されて動かせなくなり、実質的に操作不能に陥…

キーボード入力の使用をプレイヤー単位で制御する方法

オブジェクトに VRC_Trigger を追加してこれを記述すればキー入力に従って動作する装置がワールドに作れます。 ただしデフォルトでは、プレイヤーがワールドのどこに居ても反応しますし、 どのプレイヤーが入力しても反応するものになります。 実用的な装置…

ワールド管理の仕組みと用語

2018/2/18 追記: instance type の説明中 Invite+ と Invite Only に誤りがありました。打ち消し線で取り消して修正しています。 ワールドの生成の仕組みと用語が「プログラマには意味が分かるが普通には馴染みのないだろう表現」で書かれていて分かりにく…

ローカルテストをデスクトップモードで行う(vrchat-launcher)

VRChat のローカルテストをデスクトップモードで起動できるようにするツールを作りました。ついでに単体で使用した際に開始前にワールドをメニューから選択できる機能を実装しました

移動可能な椅子の作り方

概要 椅子の prefab である VRCChair をベースに、 座る機能はそのままに持って(=pickupして)運べるようにする機能を追加する。 完成品:MovableChair.unitypackage レシピ VRCChair をシーンに置く。 移動するための取っ手となるオブジェクトを作る。形…

Broadcast Types

Broadcast Types は、trigger システム において trigger の発生情報をどの範囲に送信するかの設定値。 ドキュメント: https://docs.vrchat.com/docs/trigger-broadcast-types ドキュメントに詳細な説明が無いので、以下推測を一部交えて記述する。 TODO 推…

Trigger

trigger system はワールドの中で発生する事象と、それへの反応動作を定義する機構である。 実際の具体的な処理は VRC_Trigger コンポーネントに設定する。 用語、資料 Trigger とは action を引き起こすきっかけ。 プレイヤーがオブジェクトを拾い上げる操…

VRCPhysLogicGate

自作する VRChat ワールドに論理回路を伴ったギミックを設置するための Unity アセット・パッケージです。私(naqtn)が作りました。 https://naqtn.github.io/VRCPhysLogicGate/index.html で配布しています。 デモワールド: wrld_fb79134c-bdf0-4bab-b4ae…

Custom Trigger

Custom Trigger は、具体的な action の定義に名前を付け、 それを別途に定義されるトリガー契機に外部から実行するための機構。 プログラムで関数定義(ないしはメソッド定義)の役割に近いもの。 API ドキュメントを見るよりもサンプルを見た方が、おそら…

Timer

VRC_Trigger で扱うトリガーの一つに OnTimer がある API: https://docs.vrchat.com/docs/ontimer タイマーを仕掛けるのも、それに応答するのもその VRC_Trigger 自身。 (通常のオブジェクト指向的タイマー実装を見慣れた少々奇妙にも思える設計だが OnTime…

デスクトップモードでのウィンドウの調整

ウィンドウの大きさ位置の調整 エスケープキーを押してゲーム内メニューを出す、あるいはタブキーを押していると、マウスカーソルが Windows のウィンドウの外へ出られるようになります。 この状態でならウィンドウの大きさ位置を調節できます。 フルスクリ…

PlayerMods

PlayerMods はワールドでのプレイヤーの設定を設定(変更)する機構。 プレイヤーがジャンプ出来るようにしたり、移動速度を変更できる。 追記2 VRC_PlayerModsでの移動速度とジャンプ設定を随時変えることは出来ない(一個の設定しか使えない、切り替えは…

World Jump Demo with WebPanel

デモ このリンクを踏んで VRChat を起動すると 板にワールド名が書いてあるワールドに入ります。ワールド名を触るとそのワールドにジャンプします。 この飛び先はワールド作成時に埋め込んだものではなく、VRChat 外から引っ張ってきています。 つまり例えば…

WebPanel

メモ書きレベルですが、分かったことを放出: 概要 簡単な紹介 VRC_WebPanel は web browser の画面を VR ワールド内に提供するコンポーネント 現在(2018/2)作りかけのようでドキュメントや Unity エディタ上で表示されるが動作しない機能はいろいろある模…

SteamVR でのスクリーンショットの取り方

HTC VIVE の場合 https://www.vive.com/jp/support/category_howto/how-can-i-capture-screenshots-in-vr.html VR を開いた状態でシステムボタンとトリガーを同時に押します。 とあるが「同時に」というのは少々不親切。 通常のキーボードのシフトやコントロ…

Pickup

オブジェクトに VRC_Pickup コンポーネントを追加すると、アバターで拾い上げ操作ができるオブジェクトになる。 基本 拾い上げる操作を付与したいオブジェクトに VRC_Pickup コンポーネントを追加する API: https://docs.vrchat.com/docs/vrc_pickup アバタ…

一台のマシンで Steam VR モードとデスクトップモードで同時に同じワールドに入る手順

2018/1/19 追記 最近施されたセキュリティ向上のためのパッチによって、一つのアカウントで同じワールドに入ることは出来なくなったようです。(動作確認バージョン:0.12.0p10) 以下の手順は基本的には有効ですが、二つのアカウントを使う必要があるようで…

Station

プレイヤーを通常の移動操作から一次的に切り離しオブジェクトに関連付ける仕組み。 Station は「プレイヤーがとどまる場所」ぐらいの意味と思われる。 椅子や乗り物(Vehicle)の搭乗席などが実現できる。 Prefab 椅子: VRCChair を配置する。 任意の GameO…

Keyboard

キーボード入力のアサイン https://docs.vrchat.com/docs/keyboard-and-mouse を参照。 スクリーンショット関係 スクリーンショットのために次を知っておくとよさげ。 (上記からの抜粋。) キー 機能 Control + N プレイヤー・ネームタグの表示 on/off Cont…

Log file

VRChat クライアントのログファイル デフォルトのログファイルの場所は C:/Users/{ユーザー名}/AppData/LocalLow/VRChat/vrchat;output_log.txt AppData フォルダは Windows の設定で非表示になっている場合がある。(いわゆる隠しフォルダ) console debug …

Launch URL

ワールド指定して起動させる方法 起動時に最初に入るワールドの設定 Steam クライアントのゲームを起動する画面で ゲーム名一覧中 VRChat 右クリック > プロパティ > 起動オプションを設定... を選択したダイアログで、値を vrchat://launch?id=wrld_48cf80e…

Public world ID

name ID Help Videos wrld_48cf80e6-15dd-4c17-8667-c5dc01baa5cb The HUB wrld_eb7a5096-9c93-41db-a9d7-7b349a5d4815 The Great Pug wrld_6caf5200-70e1-46c2-b043-e3c4abe69e0f Avatar Testing! wrld_8ef393c0-a985-4d7e-90f0-33ab10d41ee3 (2018/1 現在…

ID

サーバで管理する各種リソースに付ける ID (の文字列形式)は、UUID にプレフィックスを付けたものと思われる。 Unity のオブジェクトを生成する元情報の場合は Blueprint ID と呼んでいるようだ。 プレフィックス 指すもの avtr アバター wrld ワールド us…

PipelineManager

機能(推測) 現状ではワールドおよびアバターの ID に関する表示・操作ができる。 Unity Version が表示されているので、作成操作した実際の版とサーバが期待する版の比較などができているのかも? 在り処 アバターの場合 VRC_AvatarDescriptor コンポーネ…

Layers

Unity メニュー > VRChat SDK > Show Build Control Panel > Setup Layers ボタン を実行すると以下の Layer が追加される。 (pos) (name) note User Layer 8 Interactive User Layer 9 Player 自分を除いたプレイヤー(のアバター) User Layer 10 PlayerLo…