セーブ機能を実装する

セーブ機能を実装する

こんにちは、AMGです。
Unityでゲームを作っていると、小規模ならともかく、中規模程度になってくるとセーブ機能を使いたくなります。
PlayerPrefsは比較的小規模なデータの保存に適しており、高度なデータベース機能を提供するわけではありません。大量のデータやセキュリティが重要なデータを保存する場合は、他の方法を検討する必要があります。ただし、ゲーム内の簡単な設定やプレイヤーの進行状況を保存するためには便利なツールです。
そこで今回は、セーブ機能を実装させアイテムを保存する処理を書いていきましょう。


目次】
セーブ
ロード
データ削除

セーブ機能

本格的にデータを保存したい場合は、データサーバーを構築してあげる必要があります。
しかし、Unityでは簡易的にデータをセーブしたい場合もあると思います。
そういった場合はPlayerPrefs()というものを使います。

まずはUnityを立ち上げます。
ボタンオブジェクト、空のオブジェクトを追加します。
オブジェクト名はSaveObjectと言う名前に設定しておきます。

セーブ機能画像1

内容的にはこのボタンが押されたら、任意の数字を保存する処理にしたいと思います。
ボタンを押したときのスクリプトを追加します。
今回は予めここで変数も作っておきましょう。

以下のコードを追加してください。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ButtonScript : MonoBehaviour
{
    public int number;
    public const string NumberKey = "Number";

    public void OnSaveButtonClick(){
        PlayerPrefs.SetInt(NumberKey, number);
        PlayerPrefs.Save();
        Debug.Log("セーブしました");
    }
}

ボタンを押したら、PlayerPrefs.SetInt()を使って、number変数の値をNumberという名前で保存します。
その後デバッグにより『保存しました』がコンソールに表示されます。

値を保存したい場合は、PlayerPrefs.SetInt()を使用。
その後、PlayerPrefs.Save()を記述してください。
因みにInt型ではなくString型でも保存することが出来ます。
上手く応用させることが出来ると、日付、時間等もint型に変換して保存することが出来ます。

ボタンオブジェクトにアタッチ

上記のスクリプトを空のオブジェクトにアタッチします。
SaveButtonオブジェクトを選択し、Buttonコンポーネント→Onclick()を開きます。
ここに先ほどアタッチした空のオブジェクトをアタッチし、『No fanction』→『SaveScript』→『OnSaveButtonClick()』を選択します。

ゲームを実行し、セーブボタンを押すと、デバッグ処理がコンソールに表示されると思います。
無事に表示されればOKです。
次はセーブした値を読み込ませるようにしましょう。


ロード機能

保存した内容を読み込ませるためには、Set→Getへ変更します。
『LoadButton』オブジェクトをヒエラルキーに追加してください。
以下のコードを同じスクリプトに追加してください。


public void OnLoadButtonClick(){
        Debug.Log(number);
        number = PlayerPrefs.GetInt(NumberKey, 0);
        Debug.Log(number);
    }

セーブの時と同じ手順でLoadButtonオブジェクトに追加します。
追加の内容は、OnLoadButtonClick()を選択するようにしましょう。

ゲームを実行します。
まずはnumberを1(Inspectorで設定)で設定させてセーブボタンを押します。
その後、numberを0(Inspectorで設定)にします。

ロードボタンを押すと、コンソール上でnumberの変数が1に変わると思います。
number変数が1に戻っていたら無事成功です。
最後に保存したデータを削除する機能を追加しましょう。

セーブ機能画像2

データ削除機能

データをリセットしたい時に使う事が出来ます。
『DeleteButton』をヒエラルキーに追加し、『ButtonScript』にコードを追加します。


public void OnDeleteButtonClick()
    {
        Debug.Log(number);
        PlayerPrefs.DeleteKey(NumberKey);
        number = 0;
        Debug.Log(number);
    }

DeleteButtonにOnDeleteButtonClick()を追加しましょう。
Deleteすると値がnullになってしまいます。
nullだとエラーになってしまう場合があるので、それを防ぐためにDelete()を実行したら値を0で代入します。

ゲームを実行します。
既にnumberには1が保存されている状態なので、デリートボタンを押すとDebugで1→0になります。

セーブ機能画像3

これで一通りの処理を書くことが出来ました。
後はゲームの内容ごとにカスタマイズしてあげて使ってあげましょう。

個人的にSaveScriptというスクリプトを作成し、そのスクリプト内でデータを管理してあげるとやりやすいと思います。
データロードについては、Start()で処理してあげるようにすると、ゲームが始まったタイミングでデータが更新されます。
以上で今回の内容を終わらせたいと思います。

日々色々な記事を書いたりしています。お時間あれば読んでいただけると幸いです!
それではまた次回の記事でお会いいたしましょう!





セーブ機能を実装する