ERRORS
出たエラーと直し方
Refused: this triggers a player build. Pass confirm=true to build, or dry_run=true to validate without building.
原因
時間のかかるビルドを事故で走らせないための安全装置。エラーではない。
対処
本当にビルドするなら --confirm true を付ける。設定だけ確かめたいときは --dry_run true。ビルドは非同期なので、build_status を status が completed になるまで読む。
Path '…' is outside the project root '…'
原因
画面のキャプチャなど、ファイルを書き出すコマンドの保存先はプロジェクトの中に限られている。一時フォルダなど、外のパスを渡すと 400 で拒否される。
対処
プロジェクト内の相対パス(例:Temp/shots/a.png)を渡し、書き出したあとで必要な場所へコピーする。保存先はプロジェクト内の Assets/ 配下になることがあるので、使い終わったら消す(.meta が増える)。
Play 中に再コンパイルすると NullReferenceException が連続して出てエディターが固まる
原因
Play モードのまま C# を書き換えると、シリアライズしていないフィールドが null に戻る。毎フレーム動くコードがそれを参照すると、例外がコンソールを埋め尽くしてエディターが応答しなくなる。
対処
毎フレーム動く処理の先頭で、必要なものが null でないかを確かめ、null なら初期化をやり直す。作業としては、Play を止めてから書き換えるのが基本。
PlayMode テストが1件も実行されない(list_tests には出てくるのに 0 件で終わる)
原因
テスト用の asmdef が古い書き方(optionalUnityReferences だけ)のままだと、ビルド対象が WebGL のときに PlayMode テストが集められない。テストの一覧には出るので、気づきにくい。
対処
asmdef を新しい書き方にする。precompiledReferences に nunit.framework.dll、defineConstraints に UNITY_INCLUDE_TESTS、overrideReferences を true にする。直したら件数が0でないことを必ず確認する。
run_tests true 0/0 件成功 (PlayMode, 0s)
原因
PlayMode のテストは非同期で走る。コマンドはテストの開始直後に戻ってくるので、その場の表示は 0/0 になる。失敗ではない。
対処
--async_tests true を付けて実行し、プロジェクトの Temp/pipeline_test_status.json を status が completed になるまで読む。件数と失敗の内訳はそのファイルに入っている。
mapping values are not allowed here(エージェントのスキルが無言で読み込まれない)
原因
SKILL.md の frontmatter で、引用符で囲んでいない description: の中にコロンと空白(: )が入っていると、YAML がそこを新しいキーの区切りと解釈して読み込みに失敗する。失敗しても警告は出ず、そのスキルは無かったことになる。
対処
値を引用符で囲む。自分のスキルなら直せる。配布されているものは、インストール先のフォルダで各 SKILL.md の frontmatter を YAML として読み込んでみると、壊れているものが分かる。
HTTP Response Header "Content-Type" configured incorrectly on the server for file Build/xxx.wasm.br , should be "application/wasm". Startup time performance will suffer.
原因
圧縮した Web ビルドは、配信側が正しいヘッダーを付ける前提で動く。.wasm.br に Content-Type: application/wasm と Content-Encoding: br が付いていないと、この警告が出る(Content-Encoding が無い場合は読み込み自体が失敗する)。
対処
配信するサーバーの設定で、.wasm.br に application/wasm と Content-Encoding: br、.js.br に application/javascript と Content-Encoding: br を付ける。curl -I で実際のヘッダーを確認する。
Uncaught SyntaxError: Invalid or unexpected token
原因
テンプレートの index.html に埋め込んだ JavaScript が壊れている。文字列の中に実際の改行が入るとこうなる(シェルのヒアドキュメントで書き換えると起きやすい)。JavaScript が壊れていてもビルドは成功するので、ビルドの結果だけ見ても気づけない。
対処
ソースを機械的に書き換えるときは、シェルのヒアドキュメントではなくスクリプトをファイルに保存してから実行する。公開前に index.html の中の JavaScript を構文検査して、壊れていたら送信を止める。
WebGL ビルドで画面の日本語が表示されない(文字が出ず空白になる)
原因
Unity に標準で入っているフォント(LegacyRuntime.ttf)に日本語の字が入っていない。エディターでは別のフォントが使われるため、ビルドして初めて消える。
対処
日本語フォントをプロジェクトに入れて使う(ビルドは数MB増える)か、ゲーム内の文字を英数字だけにする。説明文はゲームを埋め込むページ側に書くという逃げ方もある。