処理の重さ

cdv30200

ユーザー
はじめまして、switch版を使いはじめて20日ほど経ちました。

先日長編RPGをダウンロードしてプレーしましたが、動作がとにかく遅いです(評判はいろいろ聞いていましたが)。
特にセーブには20秒近くかかるので、続きが遊びたいのにプレーするのが億劫になってしまいました。
自分も長編を作りたいですが、このような事態は避けたいと思っています。

マップはできるだけ小さくして数も減らし、可能な限り使い回すつもりです。
もちろんイベントは最小限にします。並列処理もなるべく使わないようにします。場合によってはスイッチの代わりに変数を使います。
これらの方法は処理の遅さを少しでも解消するのに有効でしょうか。
また、他に気をつけるべきところがありましたら、教えていただけると嬉しいです。
 
どうも、cdv30200さん、こん**は。
場合によってはスイッチの代わりに変数を使います。
これはそれほど軽量化にはなりません。
確かにたくさんスイッチをいじっているより、
変数をひとつ操作するのが処理が少なくなるでしょうが、
あまり軽量化には貢献できませんね。

並列処理は僕は「最高でも2つまで」というマイルールを設けています。
毎フレーム呼び出されるものなので、用心するにこしたことはない。

他のテクニックとしては……
・消去後マップが切り替わるまで消えたままのイベントは、
透明のイベントにする代わりに「イベントの一時消去」を利用する。

というのがあります。特にそういうイベントが多い場合、
如実に効果が出ます。

・タイルを無駄に重ね合わせ過ぎない。また、パノラマも使わない時は消去する
今回タイルが全4層になりましたが、手前のレイヤに置かれているタイルのせいで
奥のタイルが見えない……なんて場合は、通行処理判定に使うとかでなければ
消してしまった方が得策です。
全く見えないタイルでも、システムは愚直に描画して、タイムロスになっています。

他にも軽量化は突き詰めればかなり僕もノウハウを持っていますので
(昔ツクールXPが重いと言われていた時に、軽量化するためにあれこれやったから)
PC版ならプラグインを使った軽量化も可能なんですが、
ひとまず、スクリプトに頼らない軽量化としては上記でしょう。

以上、ご武運を祈ります。
 

cdv30200

ユーザー
こんばんは、返信ありがとうございます!
いつもプラグインでお世話になっております。
・消去後マップが切り替わるまで消えたままのイベントは、
透明のイベントにする代わりに「イベントの一時消去」を利用する。
なるほど!
これは何度でも同じ行動をとるイベントに使えるということでしょうか。
「イベントの一時消去」ならEVページを余分に作らなくても済みますね。
・タイルを無駄に重ね合わせ過ぎない。また、パノラマも使わない時は消去する
これも初めて知りました。今まで何も考えていませんでした。
例えばタイルセットのキッチンの下に
床のタイルを敷いても見えないですから、確かに必要ないですね。

パノラマというのは遠景のことですか?
大抵、一度出したら出しっぱなしなので、あまり消すことがないかもしれません。
近景も容量を多く使いそうですね。「ここぞ」という時だけにします。

詳しく教えてくださってありがとうございます!
いろいろ制約があるからこそ、いかにうまく作るかを考えるのが楽しいです。
 
パノラマというのは遠景のことですか?
その通りです。マップによってパノラマを設定しますが、
リセットするのを忘れて必要ないパノラマが表示される例がありました。
遠景は必要になったら付け、不要になったら忘れずに消しましょう。
 

rikudou

ユーザー
こんにちは!

セーブ時の硬直時間を短くする直接の方法は分からないのですが、
あくまで私個人の体感で、いくつか思いついたことを列挙させていただきます。
すでに実施されていたり、的外れな場合は申し訳ありません。
また、私はPS4版を利用しておりSwitch版は所持していないため、推測も多く含まれることを予めご了承ください。


タイルセットの画像数を減らす
長編の場合はマップのバリエーションとの兼ね合いもあると思いますが、
A~Eのタイルをフルに使わずA~Cまでの使用に留めるなどすれば、
マップのロード時に読み込む画像の枚数を減らせるので、処理の軽減につながるかもしれません。

PC版と比較してCS版では、タイルセットの読み込みの負荷がかなり大きい印象があります。
1年くらい前に制作していたプロジェクトでは、さほど広くなくイベントも数個しか置いていないマップでも
場所移動後のタイルセット読み込みが間に合わず、マップが一瞬バグったように見える現象が何度も起きました。

また、イベントコマンドの「タイルセットの変更」を頻繁に行うとフリーズする場合もあったので、
かなり負荷のかかる処理なのかと思います。


イベントを複数置く場合、出来るだけ同じシート内の画像を使う
例えばマップ上にモブキャラを5人配置するとします。
8キャラ分の歩行グラフィックが1枚のシートにまとまっていますが、
全員別々のシートから1人ずつ選んでしまうと画像を5枚読み込むことになります。
1枚のシートから5人を選べば画像が1枚で済むので、
マップのローディングだけでなく、もしかしたらセーブ時の硬直も多少短くなるかもしれません。

また、キャラクタージェネレーターで作成した画像は
デフォルトの収録素材よりも読み込みに負荷がかかるようなので、
(キャラジェネで作ったキャラを多数マップに配置すると処理落ちする場合もあるようです)
主人公など重要なキャラだけの使用にとどめておくと安全かもしれません。


イベントシーンの途中ではセーブを挟まない
会話や説明が長くなるシーンでは、途中にセーブを挟みたくなる場合があります。
しかし、イベントコマンドの行数が多いページに「セーブ画面を開く」のコマンドを挟んでしまうと、
あくまで体感ですが、プレイヤーがマップ上で任意のタイミングで行うセーブよりも
硬直時間が長く操作も重くなるため、避けたほうが良いかと思います。


ちなみにですが、セーブ時の硬直についてはPS4版の方が短いようです。
これまでプレイした長編RPGで、5秒ほど硬直することはありましたが、20秒もかかったことはありませんでした。
PS5だと硬直はほとんど気にならなくなるらしいので(そのようなツイートを見ました)、
ハードの処理能力に寄る部分もあると推測します。

上記が何かヒントになれば幸いです。
 

cdv30200

ユーザー
返信ありがとうございます!
今までマップの広さやイベントの数ばかりを気にしていて、画像の読み込みにまで考えが及びませんでした。勉強になります^ ^
イベントを複数置く場合、出来るだけ同じシート内の画像を使う
分かりやすい説明をありがとうございます!
なるほど、使う部分が多かろうが少なかろうが
1シート全部読み込まれるのなら、シート数を減らす工夫も必要ですね。
モブキャラはまだほとんど作っていないので、これから意識して作ります。

イベントシーンの途中ではセーブを挟まない
会話や説明が長くなるシーンでは、途中にセーブを挟みたくなる場合があります。
これはもう、会話や説明をできるだけ省略(文字がなくてもプレイヤーに伝わるように)しなければなりませんね。
長編になればなるほど説明は長くなりがちなので、難しいですね。楽で効果的な演出、考えます。

PC版ではあまり意識しなかった「負荷」に気をつけないといけませんね。
switch版だとセーブデータのバックアップができないし、あの小さいゲーム機で長編を作ろうと思うことがそもそもの間違いかもしれませんが、かんばって完成させたいです!

ありがとうございました!
 
トップ