ゲーム内の読み込み回数が増えるほど、フレームレートが低下する

私が制作したゲームは『Celeste』に似た、繰り返し死亡して試行錯誤するプラットフォームジャンプゲームです。

私のゲームのロジックでは、死亡はセーブデータの読み込みによるリトライを意味します。

しかし、AGM(Game Maker Studio)で複数回読み込みを行うとフレームレートが徐々に低下していくことが分かり、非常に困惑しています。

以下は私が行ったテストの結果です:

これはゲーム開始時のフレームレートで、FPS 120 を確認できます。

同じシーンでセーブデータを15回読み込んだ後↓

FPS が100まで低下しました。

同じシーンでセーブデータを20回読み込んだ後↓

同じシーンでセーブデータを35回読み込んだ後↓

同じシーンでセーブデータを60回読み込んだ後↓

最終的にフレームレートは20まで落ち込み、これは非常に不可解です。AGM が読み込み時に新しいオブジェクトを生成する一方で、読み込み前のオブジェクトを削除していないのではないか、つまり読み込みを繰り返すほどゲームが重くなり、最悪の場合はコンピュータがフリーズするのではないかという疑いがあります。この現象を確認するため、3人の友人に異なるPCでテストしてもらいましたが、全員が同じ問題に直面しました。これは本当に頭を悩ませる問題です。

私は「カメラの視界から外れたオブジェクトを削除する」機能を使いたいです。

しかし、この深刻なバグ(子オブジェクトが正しい位置で復活しない問題)↓↓↓↓(https://guild.rpgmakerofficial.com/t/topic/1294)

のために、CPU 負荷を軽減するこの機能を実装することができません。公式がいつこの問題を修正してくれるのか分かりません。

追記:セーブデータの読み込みテスト用に、空のシーンを別に作成して試してみましたが、100回読み込んでもフレームレートの低下は発生しませんでした。しかし、一定数のタイルやインタラクティブオブジェクトを配置したシーンでは、この問題が発生します。

読み込みを行わなければ、同じシーンで30分間プレイしてもフレームレートの低下は起こりません。しかし、読み込みを繰り返すとフレームレートは常に低下し続けます。これは非常に深刻な問題です…

開発チームの皆様にぜひご支援をお願いいたします!!

ここの記載を見る限りでは確かに何らかの問題があるようにみえます。
問題が起きているプロジェクトか、可能であれば最小構成の再現プロジェクトを送っていただくことは可能でしょうか。

実際に遊べるデモをエクスポートしてテストに使うことは可能でしょうか?

これはAGMを使用して以来、最も深刻なバグだと考えています。このバグはすべてのPCを慢性化してクラッシュさせる可能性があります。あまりにも恐ろしいので、開発チームに早急な解決を強くお願いいたします!

私の環境でも最小構成(プレイヤー GameObject が 1 つのみで、保存と読み込みを繰り返す)で再現できましたので、これを報告いたします。

ただし、あなたのプロジェクトでは読み込みごとに漏れるオブジェクトの数がより多いようです。比較テストのために、実際のプロジェクトを pgmmv-support@gotchagotcha.jp までお送りいただくことは可能でしょうか。

複数のマシンでのご丁寧なテスト、スクリーンショット、およびステップごとの読み込み数の提供に感謝いたします。これにより、問題の特定が大幅に絞り込めました。

「いいね!」 1

プロジェクトの資産は多く、容量も大きいため分解が不便です。単一のシナリオでプレイヤーとインタラクションできるのは、およそ60個のGameObjectと30個のArea2Dで構成されていますが、大半のGameObjectは「カメラが近づいたとき」という起動条件が設定されており、初期ロード時にはシーン内に存在しません。

参考用に監視ウィンドウを開いています。

実際に動作しているアクティブなオブジェクトは約25個です。tilemap は約1500個です。

ゲームで StartingPoints を使用していますか?FPS の低下の原因が特定できたようです。これはセーブ/ロードそのものではなく、AGM の StartPoint からプレイヤーへの解決パスに関連しているようです。シーンが読み込まれるたびにこの解決処理が再実行されるため、時間が経つにつれて問題が悪化します。

この原因があなたのプロジェクトでも同様かどうかを確認したいです。StartingPoints をすべて削除し、プレイヤーシーンを直接インスタンス化してみてください。その後、セーブ/ロードのテストを実行し、FPS の低下が防止されるか確認してください。

ここでいう startingpoints はこのノードのことでしょうか?

ゲームシーンでこのノードを使ったことがありません。存在すら知りませんでした :sweat_smile:

また、シーンインスタンス機能も使用していません(主にその機能の概要が不明だったため、使用していません)。

具体的なプロジェクトを確認しないと、何が起きているのかを適切に評価できないと考えています。プロジェクトをzipファイルに圧縮し、pgmmv-support@gotchagotcha.jp までお送りください。そうすれば、この特定の課題について調査できます。クラウドサービスからのダウンロードリンクを送っていただいても構いません。

あるいは、いくつかのパフォーマンス問題を修正した次のパッチをお待ちいただくこともできます。それでも問題が解決しない場合は、プロジェクトをお送りください。

了解,非常感谢 baz 的检测。先看看下一个补丁修复

如果不行,我把项目压缩简化成单个场景发送过去以便查看。

我的项目都只用到比较基础的功能对象链接 VS。场景里也没做新增特殊节点…都是用默认的那些…

「いいね!」 1

後で考え直したところ、原因を早く特定するに越したことはないと思いました。そこで、簡略化した個別のシーン【game_scene_1】をメールで送信しました。

zipファイル内には、game_scene_1とは無関係なtscnオブジェクトが混じっている可能性がありますので、それらは無視してください。

PNGや音声が欠落し、tscnファイルのみとなっている場合、正常に動作するかどうかは不明です。不具合がございましたら、お気軽にご連絡ください。よろしくお願いいたします!

プロジェクトを送っていただき、ありがとうございます!テストしたところ、以前お話ししたパフォーマンス問題と同じものであることがわかりました。修正は既に当方で完了しており、次のパッチで適用される予定です。

アップデート後にお試しいただき、FPS の低下が解消されたかどうかお知らせください!

直れば本当に助かります。ついにゲームを正常にプレイできるようになりました。私はプロジェクト全体で StartPoint を使用していません。
この問題が発生した原因について教えていただけますか?

フレームレート(FPS)の低下は、セーブ/ロードのたびに保持され、クリアされなかったオブジェクト参照が原因です。これは上記で言及した StartPoint の問題とは別物です(ただし、StartPoint の問題も修正済みです)。また、これはあなたのプロジェクトでも発生しているのと同じ問題です。

あなたのプロジェクトでこの問題がより深刻に顕著だったのは、シーン内の内容にかかわらずカウント数が同じままで、ロードのたびに +1 ずつ増加するためです。さらに、これらの追加オブジェクトのコストは、フレームごとに評価され続けるため、シーン全体の処理量に比例して大きくなります。そのため、負荷の高いシーンでは、負荷の軽いシーンよりもはるかに速く、劇的な速度低下を感じることになります。これは、あなたが観察していた現象と一致しています。

次のパッチがリリースされたら、あなたのプロジェクトで再テストを行い、FPS が改善されるかご確認いただけますでしょうか?

これらの問題をご報告いただき、誠にありがとうございました!

「いいね!」 1

本当にありがとうございます。次のバージョンの更新が来るのが、毎日楽しみです!