ツクールMVで作ったゲームが重くなったときの指針

はいどーもみなさんこんにちは。
ツクールMVで作ったゲームが重くなってどうしようもなくなったことありませんか?
僕はよくあります。
そんなときどうすればよいのかのノウハウを色々と培ってきたので、本日はそれを公開してみたいと思います。

問題を切り分ける

重くなったとき、もっとも大切な作業は問題を切り分けることです。
これをやらないと、ただがむしゃらに意味のない作業に時間を費やすことになってしまいます。
なお、今回は「マップシーンが重い」ことを前提として話を進めていきます(マップ以外のシーンが重い場合、ほぼ間違いなくプラグインが原因なため)。
具体的には以下のような順番で確かめてみてください。

プラグインの影響を調べる

まずはプラグインの影響で重くなっているのかどうかを確かめます。
方法は以下の通り。

1.プラグインを全てOFFにする
2.まだ重ければ、プラグインは原因ではない
3.重さが解消されれば、プラグインが原因

プラグインが原因でない場合

プラグインが原因でない場合、重くなっている原因は主に以下の三つです。
すなわち

1.マップが大きすぎる(イベントが多すぎる)
2.パソコンのスペック不足
3.並列実行(自動実行)で重くなる処理を常に実行し続けている

ひとつひとつ見ていきましょう。

まず1のマップが大きすぎる(イベントが多すぎる)場合です。
これは常識的な範囲内なら特に「重すぎてプレイできない!」なんてことにはならないんじゃないかなと思っています。
が、尋常でない数のイベントを設置し、マップの大きさを最大にした場合は知りません。
ちゅーかこんなの重くなってる原因はひと目でわかるのでどうでもいいですね。

2のパソコンのスペック不足も、ご自身でなんとなくわかるんじゃないでしょーか。

というわけで大事なのは3の並列実行(自動実行)で重くなる処理を常に実行し続けている場合です。
プラグインを使用していないのにマップが異様に重たい場合、ほぼ間違いなく3が原因です。

確認するべき箇所は二箇所あります。
まずは各イベント。
各イベントで並列実行させているものを停止させます。
これで重さが改善された場合、停止させたものの中に重くなるような処理が紛れ込んでいます。
一つ一つ並列実行をONにしていき、原因を特定してください。

次にコモンイベントです。
こちらも並列実行や自動実行で常に実行させている場合、重くなる原因となる可能性があります。
全てOFFにし、原因を特定していってください。

ちなみにどんな処理が重くなりやすいかと言えば、変数の操作じゃないでしょうか。
毎フレーム変数の操作を実行していた場合、refreshメソッド(後述します)がものすごい勢いで呼ばれ、異様に重たくなります。

プラグインが原因の場合

プラグインが原因の場合、全てのプラグインをOFFにしたあと、一つ一つプラグインをONにして重くなっているプラグインを特定してください。
この作業がめんどいよーという場合、MAPが重くなっている原因で一番怪しいのはrefreshメソッドなので、これが連続して実行されていないかどうかを確認することでプラグインを特定できる場合があります。
どうすればええんやというと、Game_Map.prototype.refresh(rpg_objects.jsファイルにあります)にconsole.log('a');とでもして、何回も呼ばれていないかどうかをチェックします。
ものすごい勢いでコンソール画面にaと表示されていればビンゴです。
console.log('a');console.trace();に変更し、どのプラグインが異様な回数でrefreshメソッドを呼んでいるのか確認してください。
なおconsole.trace()の使い方や見方について説明はしません。
ググってください(僕のブログで言えばエラーログの見方の記事が参考になるかも)。

さてプラグインの特定が済んだなら、修正しなければなりません。
しかしこれは骨の折れる作業です。
ぱっと多い浮かぶ原因は、Game_Map.prototype.refresh()を何度も呼んでいる処理がある場合(先ほど紹介した方法で確認してください)と、ループ処理に異様な時間がかかる場合でしょうか。
他には無意味なaddChild()のしすぎも考えられます。

……と、原因は「コレだ!」と確実に言えるようなものはないので、プラグイン制作者さんにお願いするのが早いかなーと思います。
が、プラグイン制作者さんも千差万別です。
必ずしもサポートしてもらえるとは限りません。

ちなみに僕は古いプラグインはほとんど修正しないと思いますw
なにせ初期のプラグインはプログラミングを始めて一ヶ月目とかに書いたコードなので、汚すぎて自分でも読む気がしませんw

快適なツクールライフを

ツクールMVはかなり自由度が高い分、ちょっとしたことですぐ重たくなってしまいます。
慣れていないと「なにが原因で重くなったのか?」がわからず、質問しようにも質問のしかたすらわからないといった事態になりかねません。
今回はそんな方たちの助けに少しでもなればなーと思って書いてみました。
ほなそんな感じで、また。

フォローする