デフォルト値で読み込む
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 が返されます。
チャレンジ
中級新しいプレイヤーに無料クレジットを5つと歓迎メッセージを用意しましょう。
Start()でデフォルト値を指定して読み込みます:credits = PlayerPrefs.GetInt("Credits", 5);。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プレイグラウンド