LoginSignup
0
0

More than 3 years have passed since last update.

1week GameJam に参加して、Unity WebGL Build で色々ハマった話

Posted at

作ったのはこちら

起こったエラー色々

かなり局所的な内容になりますが。

新Input System でエラー

全然動きません(^ω^)
自分は速攻諦めましたw
おそらくまだ非対応なのでしょう。

Cinemachine 関連でエラー

こちらでも言われていたエラーです。

unityroom 質問掲示板

確かに Cinemachine を削除したら動きました。
ただ単独で動いていたときもあったような…?

Cinemachineを使ったゲームを使っている方もいるようです。

他のエラーも起こったところを鑑みると、初期化周りに問題が起きやすいと思ったほうが良さそうです。
しっかり初期化処理を遅延できるようにコードを組んだほうが良さそう。

OnJointBreak2D が何故か発生してエラー

テスト実行ではなんの問題のなかったが、WebGLビルドして、ブラウザ実行すると発生。
特に何も使ってないイベントが発生しエラーしているようで困った…。

MonoBehaviour の中でもレアすぎるイベント。
怪しいところを探ったところ、UniRxでユーザーのissue で追加されているのを見つけ、
UniRxを外したところ…動いた。

そもそも惰性で書いていた Observele.everyUpdate が既に非推奨になっており、
メンテナンスされてない可能性が高いかなと思っているが…。
ともかく使ってはいけなかったものだった。

ということで、UniRxは使わずに動いています。

rendering without using requestAnimationFrame for the main loop.

ビルドしてみたところ、WebGL側で発生していたエラー

Looks like you are rendering without using requestAnimationFrame for the main loop.
You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!

なるほど。わからん(^ω^)
で、調べてみたところ、以下のようなスレッドが。

https://forum.unity.com/threads/rendering-without-using-requestanimationframe-for-the-main-loop.373331/

デフォルトの設定 Application.targetFrameRate = -1 が最適です。
これは、パフォーマンスが適切である限り、60hzの同期アップデートを提供します。

確かに、Application.targetFrameRate=60 を指定しているところがあるが…。
試しにコメントアウトしたところ、エラー発生せず…。

なにかしら描画更新に関するエラーのようだ。

で、自分のプロジェクトを見てみると…怪しいやつがいました。
RenderTexture、こいつが怪しいのではないかと目星をつけています。
まあ演出のために、割とめちゃくちゃやってるからね! 仕方ないね!

副次的に、Application.targetFrameRate = -1 が最適。
指定はしない方向で解決するのが良さそう。

突然、RangeError: Maximum call stack size exceeded が出る

これはブラウザのキャッシュの問題でした。
キャシュの削除をして解決。
ただjs自体あまり再帰呼び出しに強くない構造のようなので、ガッツリ再帰呼び出しするようなコードは気をつけたほうが良さそうです。

総じてWebGLする上での教訓

  1. 新InputSystem は使わない。まだ動かないよ!
  2. フレームレートは指定しないほうが良いので、レートに依存しないコードを書く(30〜144Hzを考慮して書く。)
  3. 初期化処理は詰め込まない!Start,Awakeであまり処理を書かない!

今回期日に間に合わせるために雑にコードを書きましたが、それが原因もあるので悩ましいところですね。
Cinemachine 動かなかったのは悔いが残るなぁと。

特に初期化処理周りはエンジニアの領分ですし、ちゃんとこなしたいところですが…。
時間短縮のために ObjectPool 使ってなかったりしたので、あまり良くなかったですね。
(むしろ使ってなくてもまあまあ動いてしまうのが怖いところ)

綺麗にかける時間と設計の時間があればよいのですが、
やはり、期間内に適切なボリュームのものを作ることが大切ですね。

0
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
0
0