Menu
CoddyTech

使用默认值加载

本课属于 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 删除该键。

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 在线编辑器