Unity2020.3.20f1でゲームを実行したらカクカクしていた時の話
定期的に行われるUnityのアップデート。この波に乗り遅れないようにとUnity2019.4で作成したプロジェクトをアップデートするため、Unity2020.3のエディタを試していました。
Unity2020.3.6f1あたりでは普通に動いていたのですが、Unity2020.3.19f1やUnity2020.3.20f1ではエディタでゲームを実行してみると、なんだかカクカクしている……? オブジェクトの落下の様子を撮影してみるとこんな感じに。
GIFにする過程でフレームレートを落としているというのもありますが、実際に画面上でこのようなカクカクした動きになっています。落下運動だけならまだしも、実際に操作して動かしてみると、これでゲームの内容を確認するのはちょっと厳しい感じでした。
新しいバージョンのUnityでゲームを開発したい! でもテストプレイがめっちゃ辛い!
というゲーム開発者にとっては苦しい状況でしたが、「画面の描画がボトルネックになっている」→「Graphics APIをいじってみたらいいのでは?」と天啓が降りてきてスムーズに動かせるようになったので、メモとして過程を残しておきます。
なお、私が使っているのはMacなので、Windowsでは発生しないかもしれません。いやもうこれは発生しないに越したことはないです。ほんと。
追記
Unity2020.3.21.f1でこの問題が修正されました。詳細はリリースノートをご確認ください。Metalで検索すると該当の項目にすぐ飛べます。
アップデートして動かしてみたらMetalでも滑らかに動いていて感動しました(笑) この記事はUnity2020.3.19.f1とUnity2020.3.20.f1のわずか2バージョンに対応するマニアックな記事になりました。こういうこともあるんだな、とひとつの読み物として楽しんでいただければと思います。
環境
Unity 2020.3.20f1
macOS 11.6 Big Sur
結論
先に結論からお伝えすると、Player SettingsからMac用のGraphics APIを手動で「OpenGLCore」に切り替えたら滑らかに動くようになりました。
Unity2020.3.20f1だとデフォルトでは「Auto Graphics API for Mac」にチェックが入っていて、おそらくこのままだと「Metal」が使われます。なので、このチェックを外します。
どのGraphics APIを使うか [+] ボタンから手動で選択できるので、リストに [OpenGLCore] を追加します。画像では問題の切り分けのため、「Metal」も入れていますが、リストの上にあるものが優先的に使われるので、左側の三本線記号をドラッグして「OpenGLCore」を上に移動させます。
設定を変更すると再起動を促すダイアログが表示されるので [Restart Editor] をクリックしてエディタを再起動します。
再起動後にゲームを実行して滑らかに動いていればOKです。Graphics APIを切り替えることでひとまず問題は回避できそうでした。Metalを使わないことのデメリット等もあるかと思いますが、ひとまず開発を続けて問題なさそうならこのままやってみるのが良いかなと。カクカクでテストプレイがまともにできないことに比べたら許容できる範囲です。
原因の推測
Graphics APIの切り替えで回避できたのでこのあたりに何かがあったのでは、とは考えられますが、如何せんUnityエディタの中の話なので正確な原因まではこちらで把握するのは難しいかもしれません。
ただ、リリースノートではMetalに関する既知の問題が以前からあったので、この修正を行ったタイミングと関連しているのかも? と勝手に考えています。
Unity2020.3.18までのリリースノートでは、Metalに関して以下の記述があります。
- Metal: Performance in Game View is significantly impacted by Gfx.WaitForPresentOnGfxThread when a second monitor is connected (1327408)
ざっくり訳すと、Metalを使ってる際、2つ目のモニターを接続している場合にゲームビューでパフォーマンスに影響がある、という既知の問題です。
こちらが解決されたのがUnity2020.3.19f1です。
- Graphics: Fixed performance spikes in OSX while using an external monitor. Metal editor on OSX now uses CVDisplayLink to time frame presents. (1327408)
Unity2020.3.18までサンプル抽出していくつかのバージョンを試してみたところ、この範囲では特にカクカクしているということはありませんでした。目で見て確認しているだけなので正確性はアレですが、Unity2020.3.19f1やUnity2020.3.20f1でのパッと見て分かる感じと比べると違和感はないように感じました。
元々私がこのカクカクに気付いたのはUnity2020.3.19f1を使っていた時で、リリースノートからMetalに関して修正が行われたタイミングと一致しています。なのでこのような理由から発生していたのかなーと想像しています。あくまで想像しているだけですからね。
追記
冒頭でも紹介しましたが、Unity2020.3.21.f1でこの問題が修正されました。
リリースノートから引用すると、
- Graphics: Fixed an issue where frames were being unnecessarily dropped before presenting on Metal OSX when using CVDisplayLink; this is now fixed. (1363963)
となっているのでまさにこの問題を解決してもらったみたいです。ありがたや。
まとめ
Macを使っている場合、Unity2020.3.19f1やUnity2020.3.20f1でゲームを実行すると、なんだかカクカクすることがあります。回避策としてはGraphics APIを「Metal」から「OpenGLCore」に切り替える方法があるので、もしカクカクしているなーと思ったら試してみてください。
この点は多分すぐ修正してもらえると思うので、発生するバージョンが限られた話ではありますが、念の為メモとして残しておきます。
ゲーム開発の攻略チャートを作りました!
-
前の記事
「エターナる」「エタる」という単語はツクール界隈以外でも使ってるのかな 2021.09.18
-
次の記事
Blenderがかなり進化しているのでゲーム作りのお供におすすめ 2021.10.16
コメントを書く