1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】Unity 2020 WebGL ビルドで jslib でエラーが起きるようになった場合のメモ

Posted at

はじめに

Unity では WebGL 向けビルドでブラウザと連携するために JavaScript のプラグインを作成することがあります。
Unity 2019 で WebGL 上でファイルダイアログを扱うプロジェクトがあったのですが、
先日 Unity 2020 にアップデートしてビルドしたところ、ブラウザ(Google Chrome)上で以下のようなエラーが出ました
今回はその対処について共有しようと思います。
※JavaScript について詳しくないため、間違いなどあるかもしれませんがご了承ください。

error.png

TypeError: Cannot read property 'addEventListener' of null at [関数名]

バージョン

Unity 2020.3.13f1

前提

WebGL でファイルダイアログを扱う方法として、以下の記事の FileImporter.jslib
参考にさせていただいていました。

UnityのWebGL出力でHTMLのファイル選択ダイアログを表示して外部ファイルを読み込む

エラー内容と原因

TypeError: Cannot read property 'addEventListener' of null at [関数名]

FileImporter.jslib の中で addEventListener を使っているのは一か所、 document.getElementById('#canvas') の後のみです。
どうやら ID: #canvas で Canvas を取得することができなくなったみたいです…。
おそらく Unity 2020 以降 WebGL ビルドファイルの出力形式が変更されたことに伴うものと思われます。

ビルド出力の index.html を覗くと、

canvas_id.png

ということで #canvas ではなく unity-canvas という ID が付与されるようになったようです。
また、少し下に

canvas_selector.png

であらかじめ取得してくれているので、getElementById を使わずとも変数 canvas として直接アクセスできそうです。

対処

ということで、FileImporter.jslib 内の 2 箇所

document.getElementById('#canvas').removeEventListener('click', OpenFileDialog);
document.getElementById('#canvas').addEventListener('click', OpenFileDialog, false);

を、

document.getElementById('unity-canvas').removeEventListener('click', OpenFileDialog);
document.getElementById('unity-canvas').addEventListener('click', OpenFileDialog, false);

もしくは、

canvas.removeEventListener('click', OpenFileDialog);
canvas.addEventListener('click', OpenFileDialog, false);

に書き換えて動作するようになりました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?