使用默认值加载
本课属于 Coddy Unity 学习旅程的“打造真正的游戏”单元。第 23 课,共 60 课。
从未保存过的键会读取为 0,但对于某些值来说,0 并不是合适的初始值。在赛车游戏中,玩家可以选择参加比赛的电脑对手数量,新玩家应该与 3 个对手比赛。每个 Get 都有第二个参数,即默认值,当键不存在时会返回这个值:
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:从第一次保存开始,它都会返回 true,直到使用 PlayerPrefs.DeleteKey 删除该键。
挑战
中等给新玩家 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 在线编辑器