Menu
CoddyTech

デフォルト値で読み込む

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

一度も保存されていないキーを読み取ると 0 が返されますが、値によっては 0 では始めにくいことがあります。レースゲームでは、プレイヤーがレースに参加するコンピューター制御のライバルの数を選べます。新しいプレイヤーは 3 人を相手にレースをするのがよいでしょう。すべての Get は 2 番目の引数としてデフォルト値を取り、キーが存在しない場合にその値を返します。

int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");

プレイヤーが一人で練習するためにライバルの数として 0 を保存すると、GetInt("Rivals", 3) は 0 を返します。デフォルト値が使われるのは、キーが存在しない場合だけです。だから、デフォルト値を設定するために if (rivals == 0) rivals = 3; とするのは間違いです。保存された 0 と何も保存されていない状態を区別できず、練習レースのたびにライバルを 3 人に戻してしまいます。

PlayerPrefs.HasKey(key) は、値に関係なくキーが一度でも保存されたことがあるかを答えるので、初回のゲームか、それ以降のゲームかを判別できます。このゲームでは、新しいドライバーに挨拶します。

void Start()
{
    if (!PlayerPrefs.HasKey("Driver"))
    {
        Debug.Log("First race! Pick a name in the garage.");
    }
    string driver = PlayerPrefs.GetString("Driver", "Rookie");
    Debug.Log("Driver: " + driver);
}

キーを保存するコードを実行する前に HasKey を呼び出してください。最初に保存された後は、PlayerPrefs.DeleteKey でキーが削除されるまで、true を返します。

challenge icon

チャレンジ

中級

アーケードゲーム機はプレイヤーのクレジットをキー Credits の下に保持します。Spaceキーで1クレジットを使ってゲームをプレイし、残りのクレジットは各ゲームの後に保存されます。新規プレイヤーの処理はまだ実装されていません。

  • 保存データが何もないプレイヤーは、無料クレジットを5つ持った状態で開始します。すべてのクレジットを使い切ったプレイヤーの保存値は0なので、5ではなく0で開始します。
  • welcomeText オブジェクト(ようこそ!無料クレジットが5つあります)は、Credits が保存されていないプレイヤーにだけ表示されます。それ以外のプレイヤーには表示されません。

Play を押してゲームをプレイし、次に Stop を押してから、もう一度 Play を押します。ウェルカムメッセージが消えます。その後、Check を押します。

自分で試してみよう

using UnityEngine;
using TMPro;

public class ArcadeCredits : MonoBehaviour
{
    public TMP_Text creditsText;
    public GameObject welcomeText;
    private int credits;

    void Start()
    {
        credits = PlayerPrefs.GetInt("Credits");
        welcomeText.SetActive(false);
        ShowCredits();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && credits > 0)
        {
            credits--;
            PlayerPrefs.SetInt("Credits", credits);
            PlayerPrefs.Save();
            ShowCredits();
        }
    }

    void ShowCredits()
    {
        creditsText.text = "Credits: " + credits;
    }
}
quiz icon腕試し

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

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