(この記事の使用環境: Unity 2017.3.1f1 Personal、Visual Studio Community 2017, Windows10

WebGLでビルドするときに気を付けること

unityroom にゲームを投稿するときなど。

このゲームを開発・公開する際にいろいろと苦労したので、その備忘録的なものです。

WebGL向けビルドは時間がかかる

まずはなんといってもこれ。PC向けなどよりもビルドに時間がかかるので、バグ発見・修正して再ビルドを繰り返すのはストレスが溜まりまくります。
→ なるべくビルド前に、UnityEditor内で見つけられるバグは潰しておきましょう。

ビルド後はバグの原因を特定しにくい

これはWebGL向けビルドに限りませんが、ビルド後はUnityEditorのようにDebug.Logも使えないので、原因特定しにくいです。
→ 決定的なうまい対応方法があるわけではないですが、、、
ゲームの設計・開発時に、ひとつのシーンを大きくしすぎないよう適当に複数のシーンに分割しておくなどすれば、ざっくりとした判断がしやすくなるかもしれません。シーンだけじゃなくスクリプトやプレハブもそうですね。できるだけシンプルにして、複雑に絡み合わないようにしておく。ごちゃごちゃしたものは原因特定しにくい。

WebGL(向けビルド)はUnityのすべての機能に対応しているわけではない

ここが本題。
WebGL そのもの、あるいは Unity の WebGL 向けビルド 、またブラウザの種類等に起因するものもあるかもしれませんが、とにかく、UnityEditor上で動くものがすべてWebGLで同じように動くわけではありません。

Unity公式にも情報があるので、ハマったら確認するとよいでしょう。
以下は今回みつけたもの。

1. AudioMixerの機能

AudioMixer で Duck Volume の設定をしていたのですが、WebGL向けビルドでは全く機能していませんでした。

こちらを参考に。

2. スレッド関連(async / await とか)

スレッドは JavaScript でスレッドサポートがないためサポートされていません。(中略)基本的に System.Threading 名前空間の要素は使用できないということです。
と、いうことのようです。
C# 5.0 以降からの async / await を使った書き方も無効になってしまいました。残念。

3. (根本原因特定できず)文字列配列の要素を String.Trim したとき

これは根本原因の特定はできていませんが、WebGL向けビルドでは、文字列配列の要素を String.Trim する箇所がうまく処理できないのか、該当メソッド内でそれ以降の処理に進みませんでした。いちおう備忘録として書き留めておきます。

まとめ

というように、WebGL向け開発時にはいろいろと気を付けなければならない点があります。

しかし unityroom などを利用することで、自分が開発したものを多くの人に気軽に触ってもらえるメリットは大きいと思うので、少しずつ経験値を蓄えていきたいと思います。


今回は以上です。