読者です 読者をやめる 読者になる 読者になる

くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Unityで共通データ(ScriptableObjectとPlayerPrefs)

ゲームを作っていると

  1. 複数のシーンから共通のデータを参照/更新したい
  2. 再起動してもデータが消えないよう永続化したい

という欲望にぶち当たる。

調べてみると、1はScriptableObjectで、2はPlayerPrefsというやつで実現するそうだ。

複数のシーンから共通のデータを参照/更新したい(ScriptableObject)

ScriptableObjectはゲームの起動から終了までの間で利用できる共通データオブジェクトらしい
Webアプリとかのセッションオブジェクトみたいな感じ?という認識です

使うためには、.assetファイルを作る必要があるのだが、
ScriptableObjectを継承したクラスからassetを作るスクリプトが公開されている。

ScriptableObjectを使う準備
  1. CreateScriptableObjectPrefub.csのインストールする
  2. ScriptableObjectを継承したクラスを作成する
    • ScriptableObjectを継承したクラスを作り、共用したい変数をフィールドとして定義。
    • 作ったクラスは、Assets/Resources配下に配置する
    • スコアとレベルを保存したい場合のクラス(PlayData)は下記な感じ。
#pragma strict

public class PlayData extends ScriptableObject
{
	static var score : float = 0.0;
	static var level : String = "";
}

  1. 作ったクラスをCreateScriptableObjectPrefubでasset化する
    • 2で作ったPlayData.jsを右クリック
    • すると一番下らへんに「Create ScriptableObject」というメニューがあるので、クリック
    • 「PlayData.asset」が「PlayData.js」と同じ場所に作成される。
    • これで、ScriptableObjectを使う準備はOK
    • ※2.作ったクラスにエラーがあると、エラーを吐いて、assetが作成されません

ScriptableObjectの使い方
  • 使い方の例は下記の通り。というか、普通か。
# ScriptableObjectの取得
var data : PlayData = Resources.Load( "PlayData" ) as PlayData;

# フィールドの参照
var score : float = data.score;
var level : String = data.level;

# フィールドの更新
data.score = 10.0;
data.level = "Level1";

再起動してもデータが消えないよう永続化したい(PlayerPrefs)

PlayerPrefsはセーブデータみたいに、ゲームを終了しても保存されるデータを扱うためのUnityの機能らしい。
他にもXMLJSONファイルを自前で読み書きしたりする方法もあるらしいが、お手軽なのがいいところ。
使ってみると、単なるキーバリューストアっぽい感じ

ScriptableObjectみたいに準備は特に不要。

PlayerPrefsの使い方

いつくかの例は下記な感じ。
KeyはStringのみ、ValueはInt, Float, Stringの3種類に対応している

key : String = "key";

# keyに対するデータの参照
var value : float = PlayerPrefs.GetFloat(key);

# keyに対するデータの追加/更新
PlayerPrefs.SetFloat(key, value);

# keyが存在するかの確認。Booleanが返ってきます。
PlayerPrefs.HasKey(key);

# keyをすべて削除
PlayerPrefs.DeleteAll();

# 該当のkeyを削除
PlayerPrefs.DeleteKey(key);

[PR] こんなアプリを作ってます

マグロ探し

大量の鯖(サバ)の中から1匹の鮪(マグロ)を探す、シンプルなタッチゲーム☆彡
反射神経、周辺視野、正確なタッチが求められるカジュアルゲームです♪

マグロ探し - Google Play の Android アプリ

f:id:wannabe-jellyfish:20150214232203p:plain

ボコボコリンリン♪

キャラクタを殴ってつぶしたり、釘でぶすぶす刺したりできるストレス発散ゲーム♪
いろんなキャラをボコボコにして、日頃の恨みを解消!!

ボコボコリンリン♪ - Google Play の Android アプリ

f:id:wannabe-jellyfish:20150214232225p:plain

四色漢字

赤・青・黄・緑の4色のボタンを、文字の色または漢字の読みの通りに押していく脳トレゲーム!
ストループテストという前頭葉の注意機能の検査をゲームらしくしてみました♪

四色漢字 - Google Play の Android アプリ


f:id:wannabe-jellyfish:20141006225511p:plain

参考にしている書籍

ネットだけでも情報がたくさんあるけど、体系的に理解するにはやっぱり書籍だな~と

いつもかたわらに置いてある書籍たち

ゲーム作りのはじめかた Unityで覚える企画からレベルデザインまで

ゲーム作りのはじめかた Unityで覚える企画からレベルデザインまで

Unityではじめる2Dゲーム作り徹底ガイド スマートフォンでも遊べる本格ゲーム開発に挑戦

Unityではじめる2Dゲーム作り徹底ガイド スマートフォンでも遊べる本格ゲーム開発に挑戦