SimpleMusicPlayerのつかいかた

SimpleMusicPlayerはVRChatワールド用のBGMを再生するためのとてもシンプルな音楽プレイヤーです。

f:id:sandman73773941:20210508174306p:plain

sandman.booth.pm

プロジェクトは事前にUdonSharpをインポートしている必要があります。UdonSharpはこちらのリンクから最新のリリース(Pre releaseではなくLatest releaseです)をダウンロードしてください。

github.com

SceneにSimpleMusicPlayer.prefabを設置したい場所に置いてください。

f:id:sandman73773941:20210508175312p:plain

インスペクタはこんな感じです。

f:id:sandman73773941:20210508180242p:plain

Music Clipに再生したい音楽のファイルをドラッグドロップしてください。

Base Volumeに基本となるボリュームの値(0.0 ~ 1.0の範囲)を入れてください。

VariableBackgroundのつかいかた

VariableBackgroundはVRChatワールドに置ける背景のギミックです。Interactすることで画像を切り替えることができます。 f:id:sandman73773941:20210507224008p:plain sandman.booth.pm

なお、画像の切り替えはグローバルに同期されますが、中身はUdonSynced変数もSynchronizePositionも使っていないのでネットワークに優しいです。切替時に音も鳴らせます。 画像のサイズは1920x1080です。この大きさでない画像を設定した場合は拡大縮小されます。

プロジェクトは事前にUdonSharpをインポートしている必要があります。UdonSharpはこちらのリンクから最新のリリース(Pre releaseではなくLatest releaseです)をダウンロードしてください。

github.com

Prefabs以下にあるVariableBackground.prefabをSceneに置いてください。

f:id:sandman73773941:20210507222443p:plain

こんな感じで出てきます。

f:id:sandman73773941:20210507222906p:plain

Sceneに置いたVariableBackgroundオブジェクトのインスペクタはこのようになっています。

f:id:sandman73773941:20210507222753p:plain

Change Soundで画像を切り替えたときの効果音を設定します。Noneにすると音が鳴らなくなります。

Background ListのSizeで切り替えたい画像の枚数を指定します。

Element 0、Element 1、……で画像を指定します。画像は最大で100枚まで指定できます。101枚目以降は無視されます。画像が指定されていない場合は白い画像になります。

画像の追加のしかた

追加したい画像のファイルをAsset以下の任意の場所に追加して、インスペクタからTexture TypeをSprite(2D/UI)にしてください。

f:id:sandman73773941:20210508171511p:plain

Background ListのElement 0、Element 1……でこの画像ファイルを選択してください。

AutoCleanupのつかいかた

AutoCleanupはピックアップオブジェクトに仕込んで、最後に触ったプレイヤーが一定距離離れて一定時間経つとオブジェクトを元の位置に戻すUdonギミックです。

sandman.booth.pm

プロジェクトは事前にUdonSharpをインポートしている必要があります。UdonSharpはこちらのリンクから最新のリリース(Pre releaseではなくLatest releaseです)をダウンロードしてください。

github.com

対象のVRCPickupを付けたオブジェクトにUdonBehaviourコンポーネントを取り付けてください。

f:id:sandman73773941:20210507175633p:plain

Allow Ownership Transfer On Collisionのチェックを外します。

UdonBehaviourコンポーネントのProgram SourceにAutoCleanup Udon C# Program Assetをドラッグドロップして指定してください(右のU#と書かれているやつ)。

f:id:sandman73773941:20210507175620p:plain

こんな感じになります。Synchronize Positionはグローバルな位置同期が必要ならチェックを付けてください。

f:id:sandman73773941:20210507174830p:plain

Reset Transform Distanceで指定したメートル距離以上最後にオブジェクトをピックアップしたプレイヤーが離れると時間のカウントを開始します。

Reset Transform Secで指定した秒数以上時間のカウントが進むとオブジェクトを最初の位置に戻します。

VRoidFashionMallの裏側、UdonWearもしくはもちおしゃギミックとColorfulMagicのはなし

先日きんととさん主催でVRoidFashionMallというイベントを一緒に行いました。僕はギミック担当で、衣装の試着ギミック「UdonWear」や背景の切り替えギミックなどを作成しました。 VRoidFashionMallの評判は概ね想像以上に良かったかなと思います。

渡辺秋穂さんの洗練されたロゴと、出展者の方々(渡辺秋穂さん、muucさん、ふじさきあくたさん、さくまさん、ワンダホさん)の素晴らしい衣装モデルと、きんととさんのワールドデザインと、あざらしうむさんのクールなモデルのおかげで、様々な人に楽しんでもらえてとても嬉しかったです。

試着ギミックについて様々なお褒めの言葉も頂きました。

ただ、一点だけはっきりさせておきたいことがあります。 衣装を試着できるワールドは、VRoidFashionMallが最初というわけではないということです。

特に有名なものは、元祖着せ替えワールドのもちおしゃワールドと、ColorfulMagicです。

vrchat.com

vrchat.com

もちおしゃワールドがなければUdonHatはなく、UdonHatとColorfulMagicがなければ、UdonWearもVRoidFashionMallもなかった。

penguin-the-first.hatenablog.com

わたしはこの「VRoid Fashion Mall」に"VRoidファッションコミュニティの活性化"と"豊富な数々の衣装をVRoidユーザ内外の方にも届けたい"という願いと決意を込めました。 今回はプレ開催ということで出店者数も少なく、規模を小さくして開催しましたが、今後出店者枠を増やすことで、会場内でコーディネートを楽しむことができるようにしていきたいです。 そしてファッションから始まるアバター文化を世間に広めていきたいです。

この試みが誰かの新たなきっかけになりますように。

きんとと/きんいろペンギン

もちおしゃワールドやColorfulMagicがインスピレーションを与えてくれたように、UdonWearとVRoidFashionMallが誰かの何かのきっかけになればいいなと思います。

UdonWearはBoothにて公開しています。無料かつ改変・再配布可能なライセンス(MPLv2)です。ぜひ使ってみてください。衣装作成者の方、自分のお店をVRChat上に持ってみませんか?

sandman.booth.pm

VRoidFashionMallも今後拡充予定なので乞うご期待です。きんととさんも僕もやる気です。

UdonWearのつかいかた(v0.10.1以前)

UdonWearはUdonで書かれたVRChatワールド用のギミックです。 ボーンが入っている服のモデルにUdonWearを組み込むと、着られるギミックとしてワールドに置けるようになります。

sandman.booth.pm

僕がギミック担当で参加させてもらったVRoid Fashion Mallでも使用しました。VRoid Fashion Mallの様子をききょうパンダさんが動画にまとめてくださったので、こちらを見てもらうとどういうものか分かると思います。

www.youtube.com

このドキュメントではボーンが入った服のモデルはすでに用意していると仮定して、その服のモデルにUdonWearを組み込んでワールドに置く作業を順番に説明します。

服は持ってないけどUdonWearがどんなものかとりあえず試してみたい方は、UdonWearにはサンプルのViviClothesが入っているのでそちらを使ってください。

!!!!注意!!!!

服のモデルを組み込んだワールドをVRChatにアップロードすることはその服のモデルの利用規約に違反する場合があります。特に個人が利用するアバターに付属させた状態でアップロードすることは許可されていても、UdonWearギミックのように不特定多数のユーザーが使用できる状態でアップロードすることは禁止されている場合があります。アップロードする前に必ず利用規約を確認し、アップロード可能か不明な場合は作者さんに確認を取るなど適切な対応をしてください。

ボーンが入った服のモデルの作成方法のひとつとして、とも屋さんの羅生門ツールの下人モードを使ってVRoid Studioで作ったアバターモデルから服のモデルを取り出す方法があります。詳しくはこちらのリンクを参照してください。

tomo-shi-vi.hateblo.jp

すでに服のモデルのプレハブを持っていて、それを使いたい方は、ボーンのルートがヒエラルキーの一番上の親になっておらず、一番上の親のひとつ下の子になっていることを確認してください。もしそうなっていなければ、そうなるように修正してください。

f:id:sandman73773941:20210228222812p:plain
OKな例。ボーンのルートであるRootが一番の上の親であるViviClothesのひとつ下の子になっている。

f:id:sandman73773941:20210228223133p:plain
ダメな例。ボーンのルートであるRootが一番上の親になってしまっている。

また、服のモデルはT字ポーズになっている必要があります。T字ポーズになっていない場合は修正してください。

f:id:sandman73773941:20210228223709p:plain
OKな例。T字ポーズになっている。

f:id:sandman73773941:20210228223742p:plain
誤った例。T字ポーズになっていない。

服のボーンの回転によってはUdonWearがうまく組み込めない場合があります。可能であれば、T字ポーズにさせたときに各ボーンの回転がidentityになるようにしてください。

UdonWearを組み込む

VRChat SDK3(アバター用のものではなく、ワールド用のもの)とUdonSharpがインポート済みのUnityのプロジェクトを用意します。

UdonSharpはこちらのリンクから最新のリリース(Pre releaseではなくLatest releaseです)をダウンロードしてください。

github.com

なお、VRChat SDK3をインポートしてからUdonSharpをインポートするように注意してください。

Unityプロジェクトを開いて、Assets ー> Import Package -> Custom PackageでUdonWearのパッケージをインポートします。

インポートが終わったら、Window -> UdonWear Editorを選択してUdonWearのエディタウィンドウを開きます。

f:id:sandman73773941:20210228174253p:plain
UdonWear Editorを開く
f:id:sandman73773941:20210425170445p:plain
UdonWearのエディタウィンドウを開いた直後の状態

いきなりエラーが出ていますが、これは服のモデルをまだ指定していないからです。服のモデルのプレハブをTarget Clothesにドラッグドロップします。(服のモデルを用意していない場合は、Sampleディレクトリにお試し用の服モデル「ViviClothes」を置いてあるのでそちらを使ってください)

そうするとエラーが消えて各種項目が表示され、Createボタンが押せるようになります。

f:id:sandman73773941:20210425170536p:plain
TargetClothesを指定した状態

Createボタンを押して、シーンにUdonWearが組み込まれた服のギミックを置きます。この時、ヒエラルキー内のTransformを選択しておくと、そのTransformの場所にそのTransformの子要素として置きます。選択しなかった場合はSceneの原点に置きます。

f:id:sandman73773941:20210425184214p:plain
出したい場所のTransformを指定する

f:id:sandman73773941:20210425184230p:plain
Createボタンを押すとシーンにUdonWearが組み込まれた服が置かれる

VRChatSDKのWindowでBuild & Testを押して動作確認します。服がうまくアバターに追従していれば完了です。

服がうまくアバターに追従してくれない場合

服モデルをアバターに追従させるためには、服モデルに設定されている各関節ボーンそれぞれについて対応するギミックの関節ボーンを対応付ける必要があります。UdonWearのエディタがある程度自動でこの対応付けを設定するようになっていますが、服の関節ボーンに付いている名前によってはうまくいかない場合があります。うまくいかない場合は、手作業で対応付けする必要があります。

ここではCC0で公開されているP StoreのPOPPOさんP_Store_series_12を使って説明します。緩いライセンスで素晴らしい服のモデルを公開してくださっているPOPPOさんに感謝します。

f:id:sandman73773941:20210425225126p:plain
腕のボーンが正しく追従していない例

f:id:sandman73773941:20210425225925p:plain
腕のボーン(LeftUpperArm、LeftLowerArm、RightUpperArm、RightLowerArm)が正しく設定されていない

服のプレハブを開き、Hierarchyウィンドウから追従させたい服の関節ボーンを対応するUdonWearEditor上のフィールドにドラッグドロップすると設定できます。

f:id:sandman73773941:20210426002942p:plain
服のプレハブを開いて関節ボーンの設定をする(Left arm、Left elbow、Right arm、Right elbowがUdonWearEditorで設定されていない)

f:id:sandman73773941:20210426003018p:plain
設定された状態

他にも設定されていないボーンがありますが、服モデルにそもそも存在しないボーンや追従させる必要のないボーンは設定する必要はありません。

f:id:sandman73773941:20210426004826p:plain
正しく追従するようになった状態

UdonWearのマテリアル設定

UdonWearには服のマテリアルを切り替える機能があります。この機能を使っていわゆる服のカラバリを設定できます。Materialsタブでこの設定を行います。 現状、切り替えられるマテリアルはひとつです。

f:id:sandman73773941:20210506183353p:plain

設定する手順は以下のとおりです。

  1. TargetSkinnedMeshRendererNameで切り替えたいマテリアルを使用しているSkinnedMeshRendererの名前を指定してください。

  2. TargetMaterialIndexで切り替えたいマテリアルを指定してください。

  3. MaterialNumで切り替えられるマテリアルの種類の数を設定します。デフォルトは3に設定しています。

  4. InitialMaterialIndexでどのマテリアルを最初に使用するかを指定します。

  5. 切り替える別のマテリアルをmaterials[1]やmaterials[2]にドラッグドロップしてください(図中ではmaterial[1]にc12を設定しています)。なお、material[0]は服のプレハブで設定されているマテリアルが自動で設定されます。設定されていないマテリアル(図中ではmaterial[2])は単に無視されます。

これでCreateすると右上のMaterialボタンでマテリアルを切り替えられるようになります。

f:id:sandman73773941:20210506190019p:plain

UdonWearのオプション設定

UdonWearのエディタウィンドウにはTarget Clothes以外にもオプションがあります。

f:id:sandman73773941:20210425215509p:plain
音声とその他のオプション

ClothesName

調整パネルに表示される服の名前を設定します。デフォルトではTargetClothesの名前が設定されます。

Attach Sound

服を着たとき(=服ギミックをアバターに取り付けたとき)の効果音を設定します。

Detach Sound

服を脱いだとき(=服ギミックをアバターから取り外したとき)の効果音を設定します。

Reset Sound

調整した値をリセットしたときの効果音を設定します。

ChangeMaterial Sound

マテリアルを切り替えたときの効果音を設定します。

Close Sound

調整パネルを閉じたときの効果音を設定します。

Proxymity

服ギミックのコライダーにインタラクトできる距離を設定します。

ResetTransformThreshold

UdonWearはある服ギミックを最後に触ったプレイヤーがその服ギミックから一定時間離れた状態で一定時間が経過すると服ギミックのTransformをリセットします。この項目ではその設定を行います。

Distance

ここで設定した距離以上離れると時間のカウントを開始します。

Sec

リセットされるまでの秒数を設定します。

CloseEditorPanelDistance

ここで設定した距離以上プレイヤーが調整パネルから離れるとUdonWearは調整パネルを閉じます。

ArmAngle

ここで設定した角度でUdonWearが服のポーズの初期化時にUpperArmボーンを回転させます。特にこの値が70度くらいに設定すると服は着られていないときにA字ポーズの状態になります。この値を0に設定すると服がT字ポーズの状態になります。この値を変えてもScene上では服はT字ポーズで置かれることに注意してください。UdonWearが実行時に設定された角度分回転させます。

その他のおまけ

UdonWearパッケージにはいくつかのおまけが付属しています。必要に応じて活用してください。

ギミックの説明用ポスター

f:id:sandman73773941:20210506190147p:plain f:id:sandman73773941:20210506190203p:plain

UdonWearギミックの説明用ポスターです。UdonWear/Prefabs/Textures にあります。調整パネルとDetachのためのポスターがあります。どちらもライセンスはCC0です。これらは東京アザラシセンターのあざらしうむさんが作成してくれました。感謝します。

試着室のモデル

シンプルな試着室のモデルです。このモデルのライセンスはCC0です。これもあざらしうむさんが作成してくれました。大変感謝します。

UdonWear用の拡張メニュー

f:id:sandman73773941:20210506172256p:plain

プレハブはUdonWear/Prefabs/UdonWearExtraMenu.prefab です。 VRChatのメニュー呼び出しで一緒に表示されるUdonWear用の拡張メニューです。Detachのやりかたの説明とDetachボタンが付属しています。

位置はどこでもいいのでSceneの中に置いてください。 Sceneに置いたUdonWearExtraMenuのUdonBehaviourコンポーネントのUdonWearRootTransformに、UdonWearの入った服(画像中ではViviClothes)を子要素以下の要素(つまり孫要素やひ孫要素でもOK)として含むTransform(画像中ではUdonWearRoot)を指定してください。含まれているUdonWearについてDetachボタンでDetachできるようになります。 f:id:sandman73773941:20210506155622p:plain

EmergencyDetachButton

f:id:sandman73773941:20210506190412p:plain

プレハブはUdonWear/Prefabs/EmergencyDetachButton.prefab です。 Interactすることで服をDetachできるボタンです。UdonWear用の拡張メニューと同様に、UdonBehaviourコンポーネントのUdonWearRootTransformに、UdonWearの入った服(画像中ではViviClothes)を子要素以下の要素(つまり孫要素やひ孫要素でもOK)として含むTransform(画像中ではUdonWearRoot)を指定してください。含まれているUdonWearについてこのボタンをInteractすることでDetachできるようになります。

様々な試着ギミックの紹介

はじめに

f:id:sandman73773941:20210104225650p:plain

VRChatではアバターに小物を取り付けたり服を着せてカスタマイズする文化がありますが、アバターのカスタマイズはUnityを触る必要があり大変です。もしそうした小物や服の「試着」がVRChat上でできてその場でフレンドと共有できたら楽しそうじゃないですか?

そういうことができるワールドやギミックはいくつかあります。この記事ではそうした試着システムについて僕が見つけたものを作成された時系列順に紹介していこうと思います。

試着ギミックは大雑把に「VRHat系」と「もちおしゃ系」に分けられます。

VRHat系は以下の特徴を備えるものが多いです。

  • 操作パネルがなく、VRのみ対応で直感的に操作できるが、Desktopには基本的に非対応
  • オブジェクトのサイズ変更はできないものが多い
  • オブジェクト単一で完結するため、オブジェクトをたくさん置きやすい

もちおしゃ系は以下の特徴を備えるものが多いです。

  • 操作パネルがあり、VRとDesktop両方に対応しているが、オブジェクトの位置や回転の調整は難しい
  • オブジェクトのサイズの変更ができる
  • 操作パネルが付属するため、オブジェクトをたくさん置きづらい

もちろん厳密に分けられるものではなく、両方の性質を備えたものや例外的なものも存在します。しかしこの分類は多くの場合に当てはまるのでこのことを踏まえて見ていけば理解しやすいと思います。

更新履歴

20210105 「シャオンちゃん交流会会場」を追加しました。

20210105 公開

VRHat (CyanLaserさん、2018/09)

f:id:sandman73773941:20210104223903p:plain

僕が調べたかぎりだとこれが一番古い試着できるワールドです。Udonは使われていません(Udonは2020/4公開)。燃えてたり口とかがあったり帽子以外の様々なオブジェクトを取り付けられてコミカルな雰囲気です。Desktopには非対応ながらVRだと十分楽しく遊べるギミックになっています。

vrchat.com

シャオンちゃん交流会会場(mkc1370さん、2020/5)

f:id:sandman73773941:20210105185603p:plain

分類が難しいです。無理やり分類するならもちおしゃ系ですが、もちおしゃワールドよりもこちらのワールドの方が公開日時は早いです。そして、もちおしゃワールドとは違ってこちらのギミックは衣服の着替えを主眼としていません。衣服ではなくアバターを着替えるという発想です。

プレイヤーのアバターを透明のアバターに切り替えたあと、ボーン付きメッシュのアバターモデルを着せることでアバターをまるごと試着できるという仕組みのようです。そしてアバターモデルの髪や衣服のマテリアルを操作パネルから切り替えられるようにすることで色のコーディネートを実現しています。ただし同期はされません。Desktopにも対応。

www.vrchat.com

Mochi Mochi Oshare Udon Room(おもちのびるさん、2020/06/19)

f:id:sandman73773941:20210104224035p:plain

通称もちおしゃワールド。頭部だけでなく全身を含めてドレスやスーツなどの衣服を着用することができます。VRはもちろんDesktopにも対応しています。ひとつの服につきひとつの操作パネルが対応していて、着ているプレイヤーではない別のプレイヤーが大きさや位置を調節できるのも特長です。

www.vrchat.com

Colorful Magic clothing room (キャンディちゃんさん、2020/06/28)

f:id:sandman73773941:20210104224943p:plain

panora.tokyo

分類としてはもちおしゃ系ですが、Mochi Mochi Oshare Udon Roomとはまた違った方針の着せかえワールドです。アウターやボトムスといった部位ごとに異なる衣服が用意されていて、それらの組み合わせで様々なコーデを楽しむことができます。Desktopにも対応、服の色を変えることもできたり、撮影スポットも用意されていたりなど、全体的に洗練されたワールドです。

vrchat.com

Udon試着ギミック(おにさわさん、2020/08)

onisawa.booth.pm

もちおしゃ系です。もちおしゃワールドのギミックを簡略化して小物用にした感じです。Desktopにも対応。小物を装着するならこれくらいのシンプルさがちょうど良さそう。

話題が逸れますが面白いのでこの動画を見てください。

www.youtube.com

Object Fitter(ねこのやさん、2020/11)

もちおしゃ系のギミックのようです。服と操作パネルが付いています。Desktopにも対応。服にフォーカスしたワールドを作成するならこれを使うとよさそう。

natsuneko.booth.pm

Vket5 UdonCube UC-0E / Red-01 Phasedragon(Phasedragonさん、2020/12/19)

youtu.be

VRHat系です。「うどんポケット」という名前のとおり着用というよりはオブジェクトをアバターに追従させることを目的としたギミックです。VRのみ対応。ヘルメットのような頭部に設置するものだけでなく、剣や銃などの小物をアバターの脚や胴体にくっつけられるようになっています。VRで拳銃を腰に付けられるのはいい感じです。単一のスクリプトでワールドに含まれる全てのPickupオブジェクトに適用できるのも面白いです。

www.v-market.work

Follow_Head Tools(さばちゃんさん、2020/12/19)

youtu.be

VRHat系ですが、VRHat系には珍しくオブジェクトの大きさも変更できるようになっているのが特長です。VRのみ対応。装着は頭部のみにフォーカスしています。

sabayashop.booth.pm

UdonHat (azarashiumさん、sandman、2021/01/03)

f:id:sandman73773941:20210104225927p:plain

もちおしゃ系です。僕とフレンドのazarashiumさんとで作成して公開したワールドです。Desktopにも対応。装着は頭部のみにフォーカスしています。

UdonHatではオブジェクト(帽子やアクセサリー)と操作パネル(三面鏡)を分離することでDesktopでも調整できて、かつオブジェクトもたくさん置けるようにしてあります。

f:id:sandman73773941:20210104225655p:plain

vrchat.com

アクセサリー試着システム(きゅぶんずさん、2021/01/04)

youtu.be

VRHat系です。UdonSyncedを使わずに実装されているのでワールドに大量に置いても同期できるという特長があります。VRのみ対応。

kyubuns.booth.pm

まとめ

こうしてみると試着ギミックはどれも特徴があってそれぞれ異なる想いがありますね。

もしここで挙げた以外で試着ギミックや試着ワールドをご存じの方、自分もつくったぜという方がいたらぜひ教えて下さい。加筆しようと思います。 また、ここで書いた情報が間違っている、更新して変わった等の指摘もいただけると幸いです。

UdonHatのギミックも同期周りを改善して何らかの形で公開したいと考えているので続報をお待ち下さい。

僕の想いとしては、ふらっと行ったワールドに、そのワールドに合った小物があってそれを着用して遊べるという世の中になればいいなあと思っています。温泉でタオルを頭にかけたり、ウェスタンなワールドでかっこいい帽子を被って早撃ちしたりしたいです。帽子自体にギミックが仕込まれてるのも面白そうですよね。

参考

この記事はUdonHat公開後に円フツさんがVRC試着システムについてまとめてくれた以下の一連のツイートをもとに作成しました。

UbuntuでVRChatのWorldを作成する

この記事執筆時点でVRChatのWorldやAvatarWindowsで作成することが前提になっています。しかしながら僕は普段WindowsではなくUbuntuを使っているので、できればUbuntuを使って作業したいところです。

今のところ完全にWindowsから脱却することはできていませんが、ある程度UbuntuでWorldの作成ができるレベルになったのでその方法を書いておきます。多分Avatarも同じやり方でできると思います。

そもそもWorldの作成にはUnityを使いますが、Unity自体はWindowsだけでなくUbuntuで動かすことができます。VRChat SDKも問題なくUbuntu上で起動したUnity Editor でimportできます。問題はVRChat SDKのControl PanelからBuild & TestをしようとしてもVRChatが起動しないことです。Worldを作っている間は何度もVRChatを起動して作っているWorldを確認したいのでこれは困ります。

そもそもUbuntuでVRChatを起動できるんでしょうか? できます。

UbuntuにSteamをインストールしてVRChatをインストールします。このままだと起動できないので、SteamのsettingsからSteam Playをenableにします。

このSteam Playの機能を使うとWindows用のアプリがLinuxで実行できるようになります(もちろん全てのWindows用アプリが動くわけではないですが、結構動きます)。内部ではwineからforkしたprotonというソフトウェアが使われています。

以下の内容のvrchat.exeというスクリプトを用意します。これはWindowsのexeファイルではなくただのシェルスクリプトですが、拡張子をexeにしておくことで、後でVRChat SDKのControl PanelのSettingsでVRChat ClientとしてPathを指定できるようになります。

#!/usr/bin/bash
STEAM_COMPAT_DATA_PATH=~/.proton/ ~/.steam/steam/steamapps/common/Proton\ 5.0/proton run /home/$USER/.steam/debian-installation/steamapps/common/VRChat/VRChat.exe "$@"

実行権限をつけておきます。

chmod +x vrchat.exe

この状態で普通にVRChatが起動できます。

./vrchat.exe

こうして起動したVRChat Clientは僕の環境ではなぜかWindowsで起動したときよりも妙に動きがいいです。たまにAvatarが見れなかったりWorldの機能(VideoPlayerとか)が使えなかったりすることがありますが、概ね普通に使えます。

後はVRChat SDKのControl PanelのSettingsでVRChat ClientとしてPathを指定してやればBuild & Testが普通に実行できます。ここまでくればWorld開発のサイクルを問題なく回せると思います。

もうひとつの問題がBuild & Publish for Windowsができないことです。これは解決方法を見つけることができませんでした。途中までは動きますがUnity Editorが強制終了します(これで強制終了するとUnity Hubからプロジェクトを起動できなくなるので、Unityのプロセスを全て終了するか、そのプロジェクト内にあるTemp/UnityLockfileを削除してください)。なのでアップロードするときだけはWindowsを使わざるをえません。VirttualboxなんかにWindowsを入れて使えばいいでしょう。

もしBuild & Publish for WindowsUbuntuから実行する方法を見つけた方がいたらぜひ教えてください。