top of page
執筆者の写真Amagirasu

Unityで簡単なセーブ機能を作成してみよう


Unityで簡単なセーブ機能を作成してみよう

こんにちは、アマギラスです。

Unityでセーブ機能を実装する際、最も手軽に使える方法の一つが PlayerPrefs を用いる方法です。PlayerPrefs は主に小規模なデータの保存に適しており、整数(int)、浮動小数点(float)、文字列(string)のデータを保存することができます。

この記事では、Unityで簡単なセーブ機能をPlayerPrefs を使って int 型や string 型のデータを保存し、ロードする基本的なセーブ機能を実装する方法を紹介します。


1. PlayerPrefsとは?

PlayerPrefs は、ゲーム内のデータを保存し、次回のプレイ時にロードできるようにするUnityのビルトイン機能です。PlayerPrefs は主にスコアや設定情報などの小規模なデータを保存するために使われます。

PlayerPrefs で保存できるデータ型は以下の3つです:

  • int: 整数データ

  • float: 浮動小数点データ

  • string: 文字列データ


2. セーブ機能の実装

2.1 int 型データの保存とロード

例えば、スコアやレベルなどを int 型で保存する場合は、以下のコードを使用します。


using UnityEngine;
public class SaveManager : MonoBehaviour
{
    // スコアを保存するメソッド
    public void SaveScore(int score)
    {
        PlayerPrefs.SetInt("PlayerScore", score);  // "PlayerScore" というキーでスコアを保存
        PlayerPrefs.Save();  // データを実際に保存する
        Debug.Log("スコアを保存しました: " + score);
    }
    // スコアをロードするメソッド
    public int LoadScore()
    {
        int defaultScore = 0;  // スコアが存在しない場合に返すデフォルト値
        int score = PlayerPrefs.GetInt("PlayerScore", defaultScore);  // 保存されているスコアを取得
        Debug.Log("ロードしたスコア: " + score);
        return score;
    }
}

2.2 string 型データの保存とロード

次に、例えばプレイヤー名などを string 型で保存する場合は、以下のコードを使います。

using UnityEngine;
public class SaveManager : MonoBehaviour
{
    // プレイヤー名を保存するメソッド
    public void SavePlayerName(string playerName)
    {
        PlayerPrefs.SetString("PlayerName", playerName);  // "PlayerName" というキーでプレイヤー名を保存
        PlayerPrefs.Save();  // データを実際に保存する
        Debug.Log("プレイヤー名を保存しました: " + playerName);
    }
    // プレイヤー名をロードするメソッド
    public string LoadPlayerName()
    {
        string defaultName = "Guest";  // プレイヤー名が存在しない場合のデフォルト値
        string playerName = PlayerPrefs.GetString("PlayerName", defaultName);  // 保存されているプレイヤー名を取得
        Debug.Log("ロードしたプレイヤー名: " + playerName);
        return playerName;
    }
}

3. セーブ・ロード機能の実行

これらのセーブ機能をゲーム内で呼び出すには、例えばボタンに紐付けるか、ゲームの進行に応じて呼び出すようにします。

using UnityEngine;
public class GameManager : MonoBehaviour
{
    public SaveManager saveManager;
    void Start()
    {
        // ゲーム開始時にスコアをロード
        int currentScore = saveManager.LoadScore();
        Debug.Log("現在のスコア: " + currentScore);
        // ゲーム開始時にプレイヤー名をロード
        string playerName = saveManager.LoadPlayerName();
        Debug.Log("現在のプレイヤー名: " + playerName);
    }
    public void OnSaveButtonPressed()
    {
        // スコアとプレイヤー名を保存
        saveManager.SaveScore(100);  // 例としてスコア100を保存
        saveManager.SavePlayerName("JohnDoe");  // プレイヤー名を保存
    }
    public void OnLoadButtonPressed()
    {
        // スコアとプレイヤー名をロード
        saveManager.LoadScore();
        saveManager.LoadPlayerName();
    }
}

3.1 PlayerPrefs.DeleteKey と PlayerPrefs.DeleteAll

保存したデータを削除したい場合は、PlayerPrefs.DeleteKey または PlayerPrefs.DeleteAll を使用します。

  • PlayerPrefs.DeleteKey("キー名"): 指定したキーのデータを削除します。

  • PlayerPrefs.DeleteAll(): 保存されている全てのデータを削除します(慎重に使う必要があります)。

// 特定のデータを削除
PlayerPrefs.DeleteKey("PlayerScore");
// 全てのデータを削除
PlayerPrefs.DeleteAll();

4. 注意点

  • PlayerPrefs は、ゲーム内の設定や簡単なデータの保存に適していますが、大量のデータやセキュリティが重要なデータを扱う場合には向いていません。その場合は、ファイル保存やデータベースを使用することを検討しましょう。

  • データを確実に保存するためには、PlayerPrefs.Save() を明示的に呼び出すことが推奨されます。データはアプリケーションが終了したタイミングでも保存されますが、明示的に保存することで安全性が高まります。


まとめ

今回は PlayerPrefs を使って簡単なセーブ機能を実装しました。PlayerPrefs は小規模なデータの保存に最適な方法であり、設定や進行状況を管理するのに非常に便利です。ぜひ、あなたのプロジェクトでも活用してみてください!


Unityで簡単なセーブ機能を作成してみよう

bottom of page