top of page

ファイブボックス 一分間Unity講座 データの保存と呼び出し

このブログはUnityの初心者向けに、Untiyの機能の使い方、基本のスクリプトファイルの使い方から応用までをご説明しています。中級以上の方に読んでいただきたい内容も随時更新していますので、お時間がある方、検索でここにアクセスされた方はぜひ立ち寄っていってください。

一分間Unity講座、過去の記事は「一分間Unity講座まとめ」のサイトでご確認ください。


今回は、ゲームやアプロをいったん終了した後に再起動したサイ、前回終了したときのデータから再開したい、こんな時に役に立つ機能のご紹介です。

Unityのデータの保存は、PlayerPrefsクラスが持つ、SetInt()、SetFloat()、SetString() メソッドを使用します。また保存したデータを呼び出す際には、同じくPlayerPrefsクラスが持つ、GetInt()、GetFloat()、GetString() メソッドを使用します。


下の動画は「ファイブボックス 一分間Unity講座 振り子運動をしながら弾幕を撃ち続ける方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください。



1、素材の準備


■ UI Text

事前にステージ上に検証用で使用する UI の Text を用意します。

配置したTextは「ScoreText」などの適当な名前を指定しておきます。

今後の展開を見据え、下の図のように高さを大きめにとっておきます。

文字の大きさ、色などは任意で調整してください。


一分間Unity講座初期準備

■ スクリプトファイル

続いて作成したTextを更新するためのスクリプトファイルを1つ用意し、Hierarchy上のオブジェクトにアタッチします。

サンプルでは「DataSave」という名前で保存し、MainCameraにアタッチしています。

データ保存スクリプトファイルをアタッチ

用意したスクリプトファイルをダブルクリックで立ち上げ、以下のコードを記述します。


using UnityEngine;
using UnityEngine.UI;  //NameSpaceにUIを使用する宣言

public class DataSave : MonoBehaviour
{
    Text scoreText;   //Text型の変数を宣言
    int score = 0;    //int型の変数を宣言、初期値を0に指定

    void Start()
    {
        //ScoreText を探し、Textコンポーネントを取得
        scoreText =GameObject.Find("ScoreText").GetComponent<Text>();
	   //scoreTextのtextプロパティを更新
        scoreText.text = "Score:" + score;
    }

	void Update()
	{
    		if (Input.GetKeyDown(KeyCode.S))	//Sキーを押したとき
    		{
        		score += Random.Range(1, 100);	//1~100の乱数をscoreに加算
			//scoreTextのtextプロパティを更新
        		scoreText.text = "Score:" + score;
    		}
	}
}

この段階でPlayするとスコアが0から開始され、Sキーを押すたびにスコアが加算されて表示するのがわかると思います。

一旦修正して再度プレイしても、当然スコアが0に戻っています。

スコアの保存と呼び出しイメージ

2、データの保存


PlayerPrefs は Unity における簡易的なローカルストレージのシステムで、小規模なデータ(例えば設定やスコアなど)を保存するのに適しています。 保存するデータの型に応じ整数型はSetInt()、小数型はSetFloat()、文字列型はSetString() を使用します。

関数

説明

PlayerPrefs.SetInt(string key, int value);

整数型の値を保存 key: 保存する値の識別子となる文字列

value: 保存する整数値

PlayerPrefs.SetFloat(string key, float value)

小数型の値を保存 key: 保存する値の識別子となる文字列

value: 保存する小数値

PlayerPrefs.SetString(string key, string value)

文字列型の値を保存key: 保存する値の識別子となる文字列

value: 保存する文字列の値

通常は保存ボタンや、終了ボタンを用意し、それが押されたタイミングで保存しますが、サンプルではSキーが押されたタイミングで毎回保存をかけます。


作成済みの Update()関数を以下のように修正します。

void Update()
	{
    		if (Input.GetKeyDown(KeyCode.S))
    		{
        		score += Random.Range(1, 100);	
        		scoreText.text = "Score:" + score;
			PlayerPrefs.SetInt("Score", score); //scoreをキー:Scoreに保存
    		}
	}

3、データの呼び出し


保存したデータを呼び出すには、データの型に応じ整数型はGetInt()、小数型はGetFloat()、文字列型はGetString() を使用します。 第一引数にPlayerPrefs.SetInt()などで保存した key を指定、第二引数に key がなかった時に代わりに呼び出す値を指定します。

関数

説明

PlayerPrefs.GetInt(string key, int defaultvalue);

整数型の値を取得 key: 呼び出したいキーとなる名前

defaultvalue: keyがなかった時の整数値

PlayerPrefs.GetFloat(string key, float defaultvalue)

小数型の値を取得 key: 呼び出したいキーとなる名前

defaultvalue: keyがなかった時の小数値

PlayerPrefs.GetString(string key, string defaultvalue)

文字列型の値を取得 key: 呼び出したいキーとなる名前

defaultvalue: keyがなかった時の文字列

今回のサンプルでは、ゲーム開始時(Start関数)に保存した"Score" のデータを呼び出して、変数:score に代入します。

void Start()
    {
	   //Key:Score を呼び出し変数:score に代入、Scoreがなければ0を代入
	    score = PlayerPrefs.GetInt("Score", 0);  
        scoreText =GameObject.Find("ScoreText").GetComponent<Text>();
        scoreText.text = "Score:" + score;   
    }

これで毎回ゲーム開始時に、前回終了したときのscoreを引き継ぐことができるようになっています。


ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

Comments


bottom of page