Menu
CoddyTech

デフォルト値で読み込む

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

一度も保存されていないキーを読み取ると 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

チャレンジ

中級

新しいプレイヤーに無料クレジットを5つと歓迎メッセージを用意しましょう。

  1. Start()でデフォルト値を指定して読み込みます: credits = PlayerPrefs.GetInt("Credits", 5);。
  2. welcomeText.SetActive(false);をwelcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));に置き換えます。

「プレイ」を押してゲームをプレイし、次に停止してから「プレイ」を押します。歓迎メッセージが消えています。次に「確認」を押します。

自分で試してみよう

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;
    }
}

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

自分で練習してみよう: Unityプレイグラウンド