(mac10.14.1、unity2018.2.1.5f)
こんにちは〜
今日は、特に重いわけでも無いのに、何故かカクカクするという現象に出会ったので、それの対処法です。(参考になるのかはわからないですけど)
まずは原因を探るべく、Profilerを開いてみました(InspectorやSceneなどのタブを右クリック→Add tab→Profilerで出てきますよ〜)
(そういえば2017?2018?から日本語にも少し対応したunityですが、Add tabとかはどういう表現になっているんですかね汗)
そして実行してみると、CPU Usageの所で等間隔に高くそびえ立つ山みたいなものが!!
(あ、申し訳ないんですが、改善方法を見つけて実行したら当現象、再現できなくなってしまって、画像が一切無いんです。ごめんなさい。また)
一旦実行を中断して、高くなっているところをクリックすると、白い縦線が入り、下のOverviewの所に内訳が表示されます。
そしてそこをみてみると、どうやら「Gfx.WaitForPresent」なるものが7割以上を占めていて、その実行時間なんと60~90ms!!
60fpsだと1フレームは16msですから、そりゃカクカクするわけですな(笑)
それで、とりあえずgoogle先生にこの子が何をしているのか、対処方法を聞くことに。
こちらのサイトなどに載っていますね。描画更新を待っているだけだそうです。
対策もここに載っているので、Edit → Project Settings → Quality から、 V Sync CountをDon’t Sync(フレーム数を固定しない設定だったはず)に変えたら終わりです。
・・・とは行きませんでした。
そもそも間に合って無いわけですから固定外しても意味ないですよね、(笑)
それで他のサイトをみてみると、該当しそうなオブジェクトを非表示にしてみる、とか。
・・・重そうなオブジェクトや、スクリプトを非表示にしたり表示させたりしましたが変化せず。
というか別の空シーンを開いて実行してみると、空シーンにも関わらず「Gfx.WaitForPresent」さん出現していたんですよね(画面自体は動くものがないのでカクついているのかはわからないんですけど)。
どうしたらいいものか。それでもう少しgoogle先生に聞いてみると、とあるスレッドの中で気になる記述が。
「テクスチャーを変えたら」どうたらこうたら・・・。
そこで思いついたのが、Project内で使用している画像。まだ作り始めだったので1枚しかないので、おそらくこれが原因か?と思い、
画像・・・ではなく、画像を使用しているマテリアルの「Shader」の項目を「Standard」に切り替えてみました(半透明にしたかったので別のものに変えていたんですよね)。
するとなんと、「Gfx.WaitForPresent」さんがまさかの消えるという!!
めでたしめでたし。(笑)
自分はこれでとりあえず解決はしたのですが、この「Shader」を、元の設定に戻しても、「Gfx.WaitForPresent」が再び跳ね上がることはありませんでした。
ということは、もしかしたらこれが原因ではなかったのかもしれませんが、なんせ再現できないので、あっていたかの確認手段もなく・・・汗
まぁ、もしかしたら一要因かもしれないという忘備録でした。
では、またいつか〜
↓もしこの記事が参考になったら、下のいいねボタンを押していただけると非常に助かります!(ログイン不要)↓