UnityでWebGL書き出ししたプロジェクトが実行途中で止まる事案が発生しました。
Chrome、Firefoxのデベロッパーツールのコンソールに以下のWarningが出力されたところで処理が中断していました。
warning: 2 FS.syncfs operations in flight at once, probably just doing extra work
本記事はこの警告の対処法備忘録です。
ファイルシステム使用で処理が止まる
warning: FS.syncfs operations in flight at once, probably just doing extra work
だいぶ前のフォーラムですが、FPSは下がるが無害という情報が見つかりましたが、僕の環境では処理が止まってしまいました。もしかしたら、先の警告が直接の原因ではないかも知れません。
System.IO - DirectoryInfo not working in WebGL
またWebGLビルドではSyste.IO
でファイルシステムにアクセスができないというとで、心当たりのあるコードを探ることにしました。
以下のようなローカルのJSONファイルをロードしてデシリアライズする処理を書いていた場合、先の警告が出力されて処理が止まります。
public T LoadLocalData(string path) where T : class
{
try
{
using (var sw = new StreamReader(path))
{
var json = sw.ReadToEnd();
return JsonUtility.FromJson<T>(json);
}
}
catch (System.Exception e)
{
Debug.LogError($"Error: {path} | {e.Message}");
}
return null;
}
WebGLでファイルシステムを使わないように切り分ける
public T LoadLocalData(string path) where T : class
{
# if UNITY_WEBGL
// WebGL用の代替処理
return null;
# else
try
{
using (var sw = new StreamReader(path))
{
var json = sw.ReadToEnd();
return JsonUtility.FromJson<T>(json);
}
}
catch (System.Exception e)
{
Debug.LogError($"Error: {path} | {e.Message}");
}
return null;
# endif
}
上記のようにWebGLビルド時はファイルシステムを使わないようにする事で一時的ですが回避する事ができ、WebGL書き出しのアプリが動くようになりました。
※代替処理は後で考えます。
最後に
Unity1週間ゲームジャム1に向けてWebGLビルド検証をしていた矢先のトラブルでした。結構時間を使ってしまいましたが、開始初日で起きた事が幸いでした。
扱った事のない技術の場合は、まず最初に仕様を把握して納品するための環境を整えておく事が大事だなと思いました。納品環境さえ整えば、残り時間はフルでモノづくりに集中できます。
環境
- Unity2020.1.0f1
参考
-
期間2020年08月10日(月) 00:00 〜 2020年08月16日(日) 20:00 ↩