Apple Silicon Mac でVRChatワールド製作
自己責任で!
用意しておいたほうが良いもの
Steam が動く Windows マシン (え?)
ワールドのローカルテストに必要
毎回アップロードしてやるぜ、あるいはPlayモードで十分だぜ、という場合は必要でない
Parallels Desktop で入れた Windows on Arm でも可
EAC のせいで VRChat ができない環境でもOK
DirectX 11 の GPU 支援は必要 (なので Apple Silicon Mac なら Parallels か VMware かな)
事前に VRChat を入れて一回起動しておく
EAC の起動画面まで行ければOK (EACで失敗しても)
行けなかった (なんか入室直後にクラッシュする)
環境構築注意すべきポイント
ログインするとイエ〜イ Unity Editor 入れようぜ〜〜とか言ってくるが、一旦インストールせずに閉じる
ALCOM でもそうでなくてもどこかで Unity Hub で Unity Editor をインストールすることになる
この時、Intel 版の Unity Editor を選ぶ ←ここ重要、Apple Silicon 版は選ばない (一敗)
こういう画面の時に、下の 「Intel」と書いてある方のInstallを押す
https://gyazo.com/3909796a4a5fe8ce191bf2d636717481
Recommended version と書いてあるが強い心で無視する
Apple Silicon 版のほうが (Apple Silicon Mac を使っているなら) 一般的に Recommended なのはそうだが、VRChatのワールド作成に限っては後述の理由で Intel 版を強く推奨する
Apple Silicon 版 Unity Editor だと UdonSharp が何かに Harmony でパッチを当てているパートでコケて、毎フレーム Editor にエラーログが出る
コンソールがすごい勢いで流れる
(UdonSharpはワールド固有なので、アバターだけ触るなら Apple Silicon 版でも良い)
たしか Unity Editor のコンソールの内容はどっかのファイルに書かれているので放っておくとあんまりよくなく、これを踏んだらとっとと Editor を終了して Intel 版を入れ直しましょう
code:stacktrace.txt
Exception: mprotect returned EACCES
MonoMod.RuntimeDetour.Platforms.DetourNativeMonoPosixPlatform.SetMemPerms (System.IntPtr start, System.UInt64 len, MonoMod.RuntimeDetour.Platforms.DetourNativeMonoPosixPlatform+MmapProts prot) (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
MonoMod.RuntimeDetour.Platforms.DetourNativeMonoPosixPlatform.MakeWritable (System.IntPtr src, System.UInt32 size) (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
MonoMod.RuntimeDetour.DetourHelper.MakeWritable (MonoMod.RuntimeDetour.IDetourNativePlatform plat, MonoMod.RuntimeDetour.NativeDetourData detour) (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
MonoMod.RuntimeDetour.Platforms.DetourRuntimeILPlatform._HookSelftest (System.Reflection.MethodInfo from, System.Reflection.MethodInfo to) (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
MonoMod.RuntimeDetour.Platforms.DetourRuntimeILPlatform..ctor () (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
MonoMod.RuntimeDetour.Platforms.DetourRuntimeMonoPlatform..ctor () (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
MonoMod.RuntimeDetour.DetourHelper.get_Runtime () (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
HarmonyLib.HarmonySharedState.WithStateT (System.Func`1TResult action) (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0) HarmonyLib.HarmonySharedState.GetPatchInfo (System.Reflection.MethodBase method) (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
HarmonyLib.PatchProcessor.Patch () (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
HarmonyLib.Harmony.Patch (System.Reflection.MethodBase original, HarmonyLib.HarmonyMethod prefix, HarmonyLib.HarmonyMethod postfix, HarmonyLib.HarmonyMethod transpiler, HarmonyLib.HarmonyMethod finalizer) (at <036d18f9edfb4e6d97ce4f777d0e0eb4>:0)
UdonSharpEditor.UdonSharpEditorManager.PatchInspectorTitleIfNeeded () (at ./Packages/com.vrchat.worlds/Integrations/UdonSharp/Editor/UdonSharpEditorManager.cs:816)
UdonSharpEditor.UdonSharpEditorManager.OnEditorUpdate () (at ./Packages/com.vrchat.worlds/Integrations/UdonSharp/Editor/UdonSharpEditorManager.cs:768)
UnityEditor.EditorApplication.Internal_CallUpdateFunctions () (at /Users/bokken/build/output/unity/unity/Editor/Mono/EditorApplication.cs:381)
ローカルテストしたい
Offline Testing のセクションの Number of clients を 0 にする
と、こういう風に Build & Reload などに UI が切り替わる
https://gyazo.com/9120b7e509fed9204aa6b6c9cf0bf125
切り替わったらとりあえず Build & Reload を押す
ビルドが終わった後、~/Library/Application Support/VRChat/VRChat/Worlds を予め用意しておいた Windows VM にマウントする
ドライブレターを付けないといけないので注意
VRChatのインストールフォルダで Powershell を開く
Steamからのインストールフォルダの開き方
https://gyazo.com/b2943a08c195b3c3b555138a3ba52efa
Powershellの開き方
explorerで開いたらアドレスバーに徐に powershell と入れてエンター
Powershell に以下のコマンドを入れる (注意: &url=file:/// 以降は実際にマウントした Worlds フォルダ内の vrcw ファイルに置き換えること、頭の $ はいらない
$ ./VRChat.exe "--url=create?hidden=true&name=BuildAndRun&url=file:///X:/path/to/your.vrcw" --enable-debug-gui --enable-sdk-log-levels --enable-udon-debug-logging --no-vr --watch-worlds
制約
Unity Editor からの Reload は動かないので毎回メニューを開いてワールドから「ワールドに入り直す」こと
Reload ボタンが何をしてるのかよくわかってないが、ファイル変更検知ならファイル同期ツールを入れて Mac と Windows 間で同期したらいいのかも
おわり
https://gyazo.com/448a5d9d520ba1b38cd43fe947efbf84
余談
Windows on Arm で Unity Editor は本当に遅いからやめておいたほうがいい
Rosettaのほうがたぶん早い
Build & Reload が普通に動くというアドはあれど、そもそもの遅さの差で手動rejoinのほうがたぶん早い