実は昨日、いつの間にかゲームの動作速度が異常に遅く重くなっていることに気づきました。
昨日は解決できなかったので、今日は原因探りの続き。
上限の60FPS出れば快適なのが、開発用に使っているマップで30~45FPS、戦闘中も同程度ですごいカクカク。
(FPSは簡単に言えば快適な動作をしているかの指標で、ここでは大きい方が良いといっていいものです。)
これは何よりも優先して絶対に直さなければならない・・・
ただし重いのはキャラクタの人数が多いときだけで、人数が一人だとどちらもFPS60がでるくらい快適。
で、まず戦闘中と非戦闘中の両方が重くなっているということなので両方で使っていて重そうなバトルステータスウィンドウを、バックアップをとっていたまだ重さとは無縁だったころの旧イマジナプロジェクトと交換してみました。
が、軽くならず。
ちなみに旧プロジェクトは全く同じ作りのマップでFPS51前後、戦闘中は59~60。
バトステが原因ではありませんでした。
他に両方が重くなるような改造をした心当たりがなかったので、スクリプトをひとつひとつ移しては重さを確かめるという総当たり戦に。
ここで、ついこの前に取り入れた戦闘中の背景を少し暗くするためのわずか1行の記述を消すと、戦闘中の重さがなぜか10FPSほど回復して50~55FPS前後に。マップの重さは改善せず。
理由は不明ですがこの記述はそこまで必要でもないので消して終了。
しかし総当たり戦でもこの1つしかヒットはありませんでした。
仕方ないのでDataフォルダのスクリプトを丸々旧プロジェクトに適用してみると、重さは変わらない。
ということはスクリプトは原因ではないっぽい?
で、次に怪しいコモンイベントも丸々移してみましたが、やはり重さは変わらない。
仕方なく他のデータファイルも移していくと、ある予想外のデータを移した時点で決定的に重くなりました。
それがクラス、つまり職業のファイル。
これを移すと旧プロジェクトが一気に現プロジェクトと同じ重さに。
職業には最近のシナリオ作成と、この前の大幅なスキル追加とでいろいろと設定を増やしていました。
もちろん新規プロジェクトにこの職業のデータファイルを入れても重くはなりませんでした。
でも、さっきスクリプトの全てを旧プロジェクトに移したときは重くはなりませんでした。
このことから重さの原因が職業データの充実によって前から入れていた何かのスクリプトの潜在的問題(重くなる)が発現したことだと明らかに。
さらに調べた結果、今回はめずらしく自作ではなく素材として公開されていたあるスクリプトが原因でした。
原因のメソッドはそのキャラクタのスキルを全てループさせて、それらからあるデータを取り出すという役割を持っていました。
そのメソッドの先頭でキャラクタの名前を出力させてみると、マップにいるだけで一瞬でこんなんになりました。
そんな処理を毎フレーム2~3回*3人分呼んでたら重くもなる。
人数が多いほど、職業データ(スキル)が充実してるほど重くなったのはこれが原因。
ということで処理をキャッシュをとる形に作り変えてマップ上のFPSは58前後まで上昇。
旧プロジェクトより軽くなりました。
旧プロジェクトも職業に設定していたデータこそ少なかったものの、気づかない程度に重くなっていたようです。
戦闘中のFPSはキャラが待機している間は59~60に。
これで時間がなくなったので、今日はここまで。今日中にこの致命的な問題が解決できたので、明日からは先に進むことができます。
何より快適な動作が還ってきたことはうれしすぎます。