Unity勉強 第9回 「永続データストレージを試してみる(ローカル編)」

木内智史之介(シャッチョー)
ミンカさんけっこんしてくださいおねがいします(ズザー
SEGAさん、DIVAの筐体ください(ズザー

前回のおさらい&今回の目標

最近FXを始めました。智史之介です。
前回から結構時間が開いてしまいましたね…。反省です。できれば週一と言わないまでも、隔週くらいでは勉強する時間を確保していきたいものです。

さて、前回のUnityの勉強ですが「シーンの切り替え」というような内容でした。 その関係で「シーンを跨いだ変数の保持」というような内容を試してみたくはあるのですが、ちょっと後回しにして…、今日は「永続データストレージ」に挑戦です。

永続データストレージとは?

ここで言うところの「永続データストレージ」とは、つまり、「 ゲームを落としても次回起動後に保存したデータを参照可能な領域 」というような意味合いです。 (なにっ、わかりづらいですと!すみません。)

まずは箱形を用意

箱形

本当に簡単な内容になりますが、GUI Textオブジェクトをさくっと画面上に配置してみました。 ここに、ゲームを起ち上げてからの秒数を記録してみることにします。

1
2
3
4
5
6
7
8
9
10
11
12
#pragma strict

var timer : int = 0;

function Start () {
    guiText.text = timer.ToString();
}

function Update () {
    var time : int = timer + Time.time;
    guiText.text = time.ToString();
}

スクリプトとしてはこんな感じ。これをGUI Textにドラッグ&ドロップでアタッチすることで、ゲームを起ち上げてからの秒数が画面上に表示されます。

ただし!これはゲームを一度落とすと再度「0」から始まってしまいます。 これを、前回の秒数を記録しておき、次回起ち上げ時には前回落とす前の数字から始まるように調整してみることにします。

ローカルストレージにデータを保存する

PlayerPrefsなるものを使用するようです。

上記のサイトを参考にしつつ、スクリプトをこんな感じに改修。

1
2
3
4
5
6
7
8
function Update() {
    var time : int = timer + Time.time;

    // Save to PlayerPrefs
    PlayerPrefs.SetInt('timer', time);

    guiText.text = time.ToString();
}

どうやら、PlayerPrefs.SetStringとかPlayerPrefs.SetFloatとか、型を指定して保存するらしい。
これはめんどくさいかもしれぬ…。

ローカルストレージからデータを読み込んでみる

上の修正だけではただデータを保存しているだけなので、起動時にPlayerPrefsから秒数を読み込む改修も加えてみることにします。

1
2
3
4
5
6
7
8
function Start () {
    // Has in PlayerPrefs ?
    if (PlayerPrefs.HasKey('timer')) {
        timer = PlayerPrefs.GetInt('timer');
    }

    guiText.text = timer.ToString();
}

これで、ゲームを落としても次回起動時は秒数が途中からカウントされるようになりました!ウホホーイ。

カウントアップ成功

PlayerPrefsの注意点

PlayerPrefsは、そのデータをローカルの端末自身に保存されます(Windowsに至ってはどうもレジストリに書き込まれる模様?!)。 データ改ざんが容易である可能性が高いので、重要なデータなどはやはりネットワークを通じた外部に保存するのがよいのではないかなと思われます。。

ただ、プレイヤーの設定情報など、簡単なデータに関しては十分活用の余地はあると思いますので、適材適所で使って行けたらと思います。

次回に向けて

次回は、ついにというかなんというか、今まで見て見ぬ振りをしてきた「Prefab」なるものに手を出してみようかなと…。

Unityの事を調べる度にその名前が登場するほど、Unityでは当たり前の存在らしい、「Prefab」とは一体なにものなのか?!
まずはそこから調べてみようかと思います。

ではでは!