Menu
CoddyTech

数値を保存する

CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 22/56。

ゲームを開始すると、すべてのフィールドはデフォルト値から始まります。40個の宝石を集めたプレイヤーがゲームを終了し、翌日に戻ってくると、宝石の数は0になっています。ゲームを終了すると、ゲームとその中のすべてが終了するためです。PlayerPrefsは、ゲーム間でプレイヤーのデバイスに小さな値を保持します。それぞれの値はキー(自分で選ぶ文字列)に紐づけて、SetInt、SetFloat、またはSetStringで保存します。

PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();

値を読み戻すには、同じキーを使って、同じ型のGetを呼び出します。一度も保存されていないキーを読み込むと、0、0、または空の文字列が返されるため、プレイヤーが初めてゲームをプレイするとき、このあいさつには空の名前とレベル0が表示されます。

void Start()
{
    string player = PlayerPrefs.GetString("PlayerName");
    int level = PlayerPrefs.GetInt("LevelReached");
    Debug.Log(player + " is on level " + level);
}

キーでは大文字と小文字が区別されます。GetInt("levelreached")は、一度も保存されていないキーを読み込むため、0を返します。1つのキーに保存できるのは1つの型なので、保存時に使ったSetに対応するGetで読み込みます。値はゲーム終了時だけでなく、変更されたときに保存してください。Unityはゲームが正常に終了するとPlayerPrefsをディスクに書き込み、PlayerPrefs.Save()はすぐに書き込むため、クラッシュしても値が失われません。staticフィールドを使っても回避できません。ゲームの実行中だけ保持され、終了すればそれも失われます。

challenge icon

チャレンジ

中級

Hopper の JumpCounter は画面上でジャンプ回数を数えますが、その回数は通常のフィールドなので、新しいゲームを始めるたびに Jumps: 0 に戻ります。ゲームをまたいで引き継がれる累計回数にしましょう。

  • ジャンプするたびに、PlayerPrefs.SetInt を使ってキー TotalJumps の下に jumps を保存し、PlayerPrefs.Save() でディスクに書き込みます。
  • Start() で、テキストに表示する前に保存された累計回数を jumps に読み込みます。

Play を押して数回ジャンプし、次に Stop を押してからもう一度 Play を押します。回数が引き継がれます。その後、Check を押します。

自分で試してみよう

using UnityEngine;
using TMPro;

public class JumpCounter : MonoBehaviour
{
    public TMP_Text jumpsText;
    public float hop = 5f;
    private Rigidbody rb;
    private int jumps;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        ShowJumps();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.linearVelocity = Vector3.up * hop;
            jumps++;
            ShowJumps();
        }
    }

    void ShowJumps()
    {
        jumpsText.text = "Jumps: " + jumps;
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

本格的なゲームを作るのすべてのレッスン