ウディタの処理軽減についてのあれこれ

ワールドフロンティアの処理軽減をあちこちで行ってみました。
ということで、とりあえず調べたことのまとめです。

・メモリロードを活用する
知っている人も多いでしょうが、ピクチャを表示したり音を鳴らしたりするときは、一度HDDからその情報をメモリにコピーしたうえで、ゲーム上で表現しています。HDDからメモリにロードするには結構時間がかかるので、ゲームが一瞬停止したりする事態を防ぐために、普通の商業ゲームなんかでは最初に必要なデータをメモリに全部コピーしてしまって、ゲームプレイ中はメモリロードを行いません(ローディング画面ってのは要するにこれですね)。

ウディタでもこれと同じで、ゲームプレイ中にSEとかをいちいち読み込んでいると(ほとんど体感できないレベルですが)、ゲームプレイが一瞬止まります。
なので、必要なサウンドデータは「メモリロード」のコマンドを使ってゲーム開始前にメモリに入れてあげるのがよさそうです。
ちなみに、メモリに読み込んだデータはほとんど瞬間的に再現できます。ロード画面なんかで体験したことのある人は多そうですが、ロード画面は初回表示には体感できるレベルで時間がかかる割に、二回目以降はかなりスムーズにいきます。これはセーブデータの情報をメモリに書き込んでいるからですね。

ここまでがサウンド関連。次にピクチャについて。
聞いたところによると、ウディタのピクチャ消去は単純にピクチャを消すだけじゃなくて、その後「メモリからピクチャ情報を消去」してしまうらしいです。で、メモリから消去してしまったので、再表示するにはまたHDDからデータを取ってこなくちゃいけなくて、これにまた時間がかかります。
ところが、このピクチャ消去には裏があって、メモリからピクチャ情報を消去するのは「同じピクチャが一枚も表示されていないとき」だけだそうです。ということはつまり、頻繁に使う画像なんかはどこかに表示(不透明度0で)しておけば、メモリ操作されない=処理が軽くなるとゆーことですね。
ということで、ピクチャについても必要な分はローディング画面を設けて適当に表示しておくのがよさそうです。特にスピードが求められる戦闘なんかのために、戦闘エフェクトはどっかに表示しておいた方がいいのかな?

・セーブ&ロードをなるべく使わない
セーブ&ロード処理を自作したことのある人なら、この二つの処理がかなり重いのはご存じだと思います。
で、聞いたところによると普通のセーブ&ロードなんかと、セーブデータ内の変数を読み書きする処理は同じ重さだそうですね。短編ならセーブデータもちっちゃいので問題ないですが、長編ともなるとセーブデータが肥大化し、読み書きにいちいち遅延が発生します。
基本システムではセーブデータ共通の情報(最終セーブ位置とか)はSystem.savという専用のセーブデータを作って保管してますが、セーブデータが大きくなってきたら、これをとっぱらって、CSVとかtextとかに保存する方が処理速度的にはおそらく速いです(ということにSystem.savを使うセーブロード処理を全部作り終えてから気づきましたorz)。

・ピクチャ以外停止を使う
イベント制御のところにあるこのコマンド。あまり使ったことがない人も多いのでは。
これはピクチャ以外の画像更新を停止するコマンドです。戦闘とかその他シミュレーション系でピクチャですべてを行っている画面では、マップの情報は必要ないのでこのコマンドを使って処理軽減に努めましょう。


全部やってみて、個人的にはピクチャのメモリロード>サウンドのメモリロード>それ以外って感じで処理軽減につながった気がします。
関連記事
スポンサーサイト

コメントの投稿

非公開コメント

Twitter
カテゴリ
最新コメント
月別アーカイブ
カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR