セーブとロード機能を導入したいけど、どうやったら良いかわからない。
簡単にできる方法はないかな?
そんなお悩みにお答えします!
Unityでゲームを開発していると、セーブ・ロード機能が必要になることがあります。
でも、導入をどのようにすれば良いのか、初心者にはいまいちわかりづらいです。
そこで、UnityアセットのEasy Saveを使うと、簡単にセーブ・ロード機能を導入することができます。
特にオートセーブは基本コードいらずで実装できるので、とてもおすすめです。
本記事では、UnityのアセットEasy Saveの導入とオートセーブの使い方をご紹介します。
Easy Saveとは
Easy Saveは手軽にセーブ・ロードを導入できるUnityのアセットです。
コードを記述して好きなタイミングでセーブ・ロードを実装できます。
また、チェックを入れるだけのオートセーブにも対応しています。
セーブデータを暗号化することでセキュリティを高めることもできます。
このアセットを使用することで、セーブに関わる手間を大幅に削減できます。
Easy Saveの導入
Easy Saveを導入する手順は、下記のとおりです。
Easy Saveを購入
Easy Saveを持っていない方は、まずはアセットストアから購入しましょう。
Easy Saveをインポートする
Unityエディタを開きます。
Window→Package Managerを選択してください。
PackageをMy Asesetsに変更。
Easy Saveを選択したら右下のImportをクリックします。
ダイアログが表示されたら、そのままImportをクリックします。
これでEasy Saveの導入が完了しました。
Easy Saveオートセーブの使い方
使い方としては、
- コードを書く
- オートセーブ
の2通りがあり、どちらも簡単な手順でセーブを実装できます。
今回は、基本コードいらずで簡単にセーブ機能を実装できるオートセーブをご紹介します。
前準備
例として簡単なゲームを作ったので、こちらを用いて説明します。
10秒の間にボタンを押した回数を競うというミニゲームです。
オートセーブを実装し、ハイスコアを保存・ゲーム再開後もハイスコアを表示したいと思います。
ゲームの作り方については、こちらの記事をご参考ください。
既存のタイミングでオートセーブ・ロードする設定
まず、Tools→Easy Save 3→Auto Saveを選択します。
Enable Auto Save for this sceneをクリックします。
HierarchyタブにEasy Save 3 Managerが生成されました。
これはオートセーブに必要なものなので、削除しないようにしてください。
ただ、もし誤って削除したとしても前述のEnable Auto Save for this sceneから簡単に再生成できます。
あとセーブ項目を設定するダイアログが表示されているので、こちらから各種設定を行います。
初期設定は下記の通りです。
- Save Event:On Application Quit
- Load Event:Awake
簡単に言うと、ゲームを終了した時にセーブ、ゲームを始めたときにロードされます。
基本はこのままでOKです。
今回は、ハイスコアを保存して、再開後にハイスコアを表示するようにします。
保存対象は下記のとおりです。
- ハイスコアを表示するテキスト
- ハイスコアの数値
HighScoreText左の三角をクリック→HighScoreText(Text)にチェック。
ClickManager左の三角をクリック→ClickManager(ClickManager)にチェック。
さらに右側の歯車アイコンをクリックします。
保存する対象を選択します。
highScoreのみにチェックを入れてください。
これで再開後にハイスコアを表示できるようになります。
お疲れさまでした。
既存のタイミングでオートセーブ・ロードする設定の注意点
上記で紹介した既存のタイミングでオートセーブ・ロードする設定ですが、いくつか問題点があります。
- 暗号化した時にロードするとエラーが出ることがある
- 一部の機種のスマホでは、ゲーム終了時にうまくセーブができないこともある
- 任意のタイミングでセーブ・ロードができない
- ゲーム終了時にセーブされるので、シーンをまたいだ場合セーブが実行されないことも…
これらに困ったときは、少し手間は増えますが、次項の任意のタイミングでオートセーブ・ロードする設定にすると良いです。
任意のタイミングでオートセーブ・ロードする設定
手順の違いは下記の2つです。
- Save EventをNone、Load EventをNoneに変更する
- オートセーブを実行するコードを書く
まず、Save EventをNone、Load EventをNoneに変更しましょう。
これをしないとエラーが起きる場合があります。
公式マニュアルでも、下記の通り推奨しています。
そして、任意のタイミングでオートセーブ・ロードするには、オートセーブを実行するコードをスクリプトに書く必要があります。
- セーブ:ES3AutoSaveMgr.Current.Save();
- ロード:ES3AutoSaveMgr.Current.Load();
今回は、ハイスコア更新時にセーブ、スタート時にロードするようにしたいと思います。
ClickManagerスクリプトを下記の通り変更します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ClickManager : MonoBehaviour
{
//カウント用の変数を用意
public int count = 0;
//テキスト型の変数を用意。スコア表示
public Text countText;
//float型の変数を用意
public float time = 10.0f;
//テキスト型の変数を用意。タイム表示
public Text timeText;
//ハイスコア用の変数を用意
public int highScore = 0;
//テキスト型の変数を用意。ハイスコア表示
public Text highScoreText;
//変数を増やす関数を作成
public void PushButton()
{
//timeが0より上の時
if (time > 0)
{
//countを1ずつ増やす
count++;
//増えた数字をテキストで表示
countText.text = "スコア:" + count;
}
}
// Start is called before the first frame update
void Start()
{
//オートロードする
ES3AutoSaveMgr.Current.Load();
}
// Update is called once per frame
void Update()
{
//timeが0以下の時
if (time <= 0)
{
//テキストにカウントダウンの表示をする
timeText.text = "タイム:0.00";
}
else
{
//カウントダウンさせる
time -= Time.deltaTime;
//テキストにカウントダウンの表示をする
timeText.text = "タイム:" + time.ToString("f2");
}
//ハイスコアを超えた場合に更新
if (highScore < count)
{
highScore = count;
Debug.Log(highScore);
//ハイスコアをテキストで表示
highScoreText.text = "ハイスコア:" + highScore;
//オートセーブする
ES3AutoSaveMgr.Current.Save();
}
}
}
これで再開後にハイスコアを表示できるようになりました。
お疲れさまでした。
Easy Saveオートセーブの使い方詳細
ホームページのガイドには、オートセーブ以外にも色々な活用法が詳しく解説されていますので、参考にしてみてください。
【Unity】アセットEasy Saveの導入とオートセーブの使い方のまとめ
本記事では、UnityのアセットEasy Saveの導入とオートセーブの使い方をご紹介しました。
Unity初心者にとって、Easy Saveはお手軽で効果的なセーブ・ロードの手段となります。
特にオートセーブは、初心者にとって便利で使いやすいです。
ぜひ、このアセットEasy Saveを取り入れて、よりスムーズなUnityゲーム開発を楽しんでみてください。
本記事が、皆さんの参考になれば幸いです。