2013年2月11日月曜日

より優れたPlayerPrefsクラス

PlayerPrefsを改善したクラスを提供してところを見つけたのでサイトの情報を紹介したい:

http://www.previewlabs.com/writing-playerprefs-fast/
3/11/2011

Unity でプラットフォーム独自の方法でデータを保存するのに PlayerPrefs を使用することがある。

このクラスはハッシュテーブルの働きをして キーバリューのペアを保存できる。

ビルトインの PlayerPrefs クラスの欠点として iOS で非常に遅く、Android でさらに遅いことだ。Google Nexus One で行ったテストでは、毎秒あたり 平均 6.25 個のキーバリューのペアしか保存出来なかった。300 件以上を保存しようとしていたので、あまりに時間がかかりすぎた。全ての修正毎にファイルI/Oが行われている可能性が高い。現在の PlayerPrefs クラスは大量データを扱うのに不向きだ。

そこでオリジナルの PlayerPrefs を実装しようと決めて、プロトタイプの中で高速保存が出来るパラメーターのチューニングを可能とした。同じデバイス上で現在は300 件以上を瞬時に行えるようになった。

すでに Unity の PlayerPrefs クラスをプロジェクトで使用していて、iOS および Android での最適化方法を探している場合、次の手順によって実行出来る:

PlayerPrefs.cs ファイルをダウンロードしてプロジェクトに追加してほしい。

PlayerPrefs が使用されているスクリプトの冒頭に次の行を追加:
using PlayerPrefs = PreviewLabs.PlayerPrefs;
PlayerPrefs.Flush() を使用して全ての値を保存する。これはデータを大量に書き込みすときか、アプリケーション終了時に行う(メインとなるゲーム クラスの中で) :
public void OnApplicationQuit()
{
 PlayerPrefs.Flush();
}
最適化として機能するために、Hashtableを保持して Flush() が呼ばれたときのみファイル書き込みするようにした。

XML形式は意図的に使用しておらず、今回気にしているローエンド デバイスで不要なオーバーヘッドがかかるためだ。
------

筆者も Unity Store でダウンロードしたプロジェクトサンプルにこのクラスが含まれていて、なるほどとおもってソースコードを眺めた記憶がある。

便利なものはどんどん活用しようぜ!

0 件のコメント:

コメントを投稿

ブックマークに追加

このエントリーをはてなブックマークに追加

自己紹介

自分の写真
Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます

ページビューの合計

過去7日間の人気投稿