UnityのWebGL出力で落ちた落とし穴まとめ

ビルドボタンが押下できない

Project Settings → 
Color Space が Linear
Lightmap Encoding が High Quality
だと WebGL 1.0 ではビルドできないらしく
Auto Graphics API チェックを外し、 Graphics APIs を WebGL 2.0 にすることでビルドが可能になった。

ビルドエラーが起きてビルドが出来ない

Project Settings → Decompression Fallback にチェックをつける

StandaloneFileBrowserのファイルブラウザーがエラーになる

そもそもWebGL版のみAPIが違うので、色々と組み替えないといけない。

#if UNITY_WEBGL && !UNITY_EDITOR
    //
    // WebGL
    //
    [DllImport("__Internal")]
    private static extern void DownloadFile(string gameObjectName, string methodName, string filename, byte[] byteArray, int byteArraySize);

    // Broser plugin should be called in OnPointerDown.
    public void OnPointerDown(PointerEventData eventData) {
        DownloadFile(gameObject.name, "OnFileDownload", "sample.png", _textureBytes, _textureBytes.Length);
    }

    // Called from browser
    public void OnFileDownload() {
        output.text = "File Successfully Downloaded";
    }
#else
    //
    // Standalone platforms & editor
    //
    public void OnPointerDown(PointerEventData eventData) { }

    // Listen OnClick event in standlone builds
    void Start() {
        var button = GetComponent<Button>();
        button.onClick.AddListener(OnClick);
    }

    public void OnClick() {
        var path = StandaloneFileBrowser.SaveFilePanel("Title", "", "sample", "png");
        if (!string.IsNullOrEmpty(path)) {
            File.WriteAllBytes(path, _textureBytes);
        }
    }
#endif

Webブラウザで確認できない

ビルド後のindex.htmlをそのまま開いても立ち上がらない。
WebServer for Chrome などで、ビルドした先を指定してWeb Server URL(s)へアクセスしてみると動作した。

AsyncGPUReadback.Requestが動作しない

まあそうだ、という感じですが別スレッドで動くAPIは失敗します。
こういうのをちまちま潰していくとWebGL版で動くようになると思いますが、スレッド実行しまくってるプロジェクトを対応させるのは面倒そう…。

FontFallbackに対応していない

デフォルトのテキストを使用するとArialが指定されていますが、WebGL版ではUnity が テキストの描画で使用する OS のデフォルトフォントは指定できないため、フォールバックフォントが見つからず描画されないのだと思います。

[blogcard url=”https://docs.unity3d.com/ja/2018.4/Manual/class-Font.html”」

対策は、言語ごとにttfを変えてテキストのフォントを変える、という感じでしょうか。
ひとまずは日本語であればNoto Sans Japanese が良いかも。

コメントする

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください