FAQ(よくある質問)
UdonEmu の使用中によくある質問と解決方法をまとめました。
インストール / 導入
Q. 依存関係のエラーが出る
A. UdonEmu は以下の環境を前提としています:
- Unity 2020.2.22f1 以降
- VRChat SDK3 - Worlds 3.8.2 以降
- Sardinject(VCC で導入) 0.8.10 以降
これらがインストールされているか確認してください。
実行 / 動作
Q. イベントが実行されない
A. 以下を確認してください:
-
イベント名が正しいか
- 大文字小文字を区別します
-
初期化が完了しているか
InitializeUdonContentなどの初期化メソッドが呼ばれているか確認
-
プログラムに該当のエントリポイントが存在するか
Dump()を使ってプログラム構造を確認し、EntryPoints に該当のイベントが含まれているか確認
var programJson = udonProgram.Dump();
Debug.Log(programJson);
// EntryPoints セクションを確認
Q. 変数が取得できない / 設定できない
A. 以下を確認してください:
-
変数名が正しいか
- 大文字小文字を区別します
- スペースや特殊文字に注意
-
変数が存在するか
Dump()を使って VariableTable を確認
var variablesJson = variables.Dump();
Debug.Log(variablesJson);
- 型が一致しているか
TryGetUdonProgramVariable<T>を使って型安全に取得
互換性 / 差異
Q. 公式 VRChat と結果が違う
A. 以下の手順で原因を切り分けてください:
- プログラムを Dump
var programJson = udonProgram.Dump();
Debug.Log(programJson);
-
最小再現コードを作成
- イベント1つのみ
- 変数は最小限
- 外部依存を排除
-
GitHub Issues で報告
- UdonEmu のバージョン
- Unity / VRChat SDK のバージョン
- 最小再現コード
- 期待される動作と実際の動作
詳細は 互換性と差異 を参照してください。
Q. 特定の Udon 機能が動作しない
A. UdonEmu は公式実装の模倣であり、以下の制約があります:
- VRChat 固有のネットワーク機能は完全には模倣できません
- 一部の VRChat API は Editor 環境では動作が異なります
動作しない機能を発見した場合は、GitHub Issues で報告してください。
実運用(動的差し替え)
Q. 動的にコードを差し替えるのはセキュリティ上問題ないか?
A. 任意コード実行のリスクがあります。
以下のような対策を検討してください:
必須対策
-
URL ホワイトリスト
var allowedDomains = { "example.com", "cdn.example.com" };
if (!IsAllowedDomain(url, allowedDomains)) {
Debug.LogError("Domain not whitelisted");
return;
} -
サイズ制限
var MAX_SIZE = 1024 * 1024; // 1MB
if (assemblyText.Length > MAX_SIZE) {
Debug.LogError("Assembly too large");
return;
} -
署名検証(推奨)
- サーバー側で UdonAssembly に署名を付与
- クライアント側で検証してから実行
Q. 頻繁に差し替えるとパフォーマンスに影響するか?
A. はい、影響します。
UdonAssembly のパース・VM 初期化にはコストがかかります。
推奨事項
- ⛔ フレームごとの差し替えは避ける
- ✅ 起動時 or イベント駆動に留める
- ✅ キャッシュを活用する
Q. VRChat の利用規約・ガイドラインに抵触しないか?
A. VRChat 公式の見解を確認してください。
現状(2025年12月時点)
- VRChat の公式ドキュメントでは、動的コード実行に関する明確な制限は示されていません
- ただし、今後制限される可能性があります
推奨事項
- VRChat 公式のアナウンスを定期的に確認
- 悪用されるような使い方を避ける(セキュリティ対策必須)
規約違反のリスク
VRChat の利用規約は変更される可能性があります。
動的コード実行が将来的に制限されるリスクを理解した上で使用してください。