こんにちは、AMGです。
Unityでゲームを作っていると、小規模ならともかく、中規模程度になってくるとセーブ機能を使いたくなります。
PlayerPrefsは比較的小規模なデータの保存に適しており、高度なデータベース機能を提供するわけではありません。大量のデータやセキュリティが重要なデータを保存する場合は、他の方法を検討する必要があります。ただし、ゲーム内の簡単な設定やプレイヤーの進行状況を保存するためには便利なツールです。
そこで今回は、セーブ機能を実装させアイテムを保存する処理を書いていきましょう。
セーブ機能
本格的にデータを保存したい場合は、データサーバーを構築してあげる必要があります。
しかし、Unityでは簡易的にデータをセーブしたい場合もあると思います。
そういった場合はPlayerPrefs()というものを使います。
まずはUnityを立ち上げます。
ボタンオブジェクト、空のオブジェクトを追加します。
オブジェクト名はSaveObjectと言う名前に設定しておきます。
内容的にはこのボタンが押されたら、任意の数字を保存する処理にしたいと思います。
ボタンを押したときのスクリプトを追加します。
今回は予めここで変数も作っておきましょう。
以下のコードを追加してください。
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に戻っていたら無事成功です。
最後に保存したデータを削除する機能を追加しましょう。
データ削除機能
データをリセットしたい時に使う事が出来ます。
『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になります。
これで一通りの処理を書くことが出来ました。
後はゲームの内容ごとにカスタマイズしてあげて使ってあげましょう。
個人的にSaveScriptというスクリプトを作成し、そのスクリプト内でデータを管理してあげるとやりやすいと思います。
データロードについては、Start()で処理してあげるようにすると、ゲームが始まったタイミングでデータが更新されます。
以上で今回の内容を終わらせたいと思います。
日々色々な記事を書いたりしています。お時間あれば読んでいただけると幸いです!
それではまた次回の記事でお会いいたしましょう!