我正在尝试在 Unity UI 中创建一个复选框,将布尔无尽游戏返回为“真”,如果是计时游戏,则返回“假”。我想用 PlayerPrefs 做到这一点。我知道 PP 只支持 int、float 和 string。我创建了一个为 1 的函数。
我有一个处理游戏整体状态的游戏管理器,这个游戏对象是我游戏中唯一一个不会在加载时被破坏的游戏对象。
到目前为止,游戏管理器有一个初始化为的 bool 'endless'
endless = PlayerPrefs.GetInt("Endless", 1) == 0;
在启动函数中。
现在我有一个包含复选框的选项菜单,在这个脚本中如下:
public void OnToggleEndless()
{
if (endLessToggle.isOn)
{
PlayerPrefs.SetInt("Endless", manager.endless ? 1 : 0);
print("Endless Button ticked");
}
else
{
PlayerPrefs.SetInt("Endless", manager.endless ? 0 : 0);
print("Endless Button unticked");
}
}
但是当我连接它,玩游戏并转到选项菜单并勾选“无尽游戏”时,没有任何反应。我试图把 OnToggleEndless(); Update 中的方法,但这只会给我无穷无尽的打印行(“Endless Button ticked”);消息,不保存 PlayerPrefs。我想知道复选框是否正确连接。这个我想不通!
答案 0 :(得分:1)
不保存 PlayerPrefs
PlayerPrefs
的保存似乎有问题,您确定要实际检查 manager.endless
而不是 endLessToggle.isOn
。
因为 endLessToggle.isOn
的状态会根据您启用还是禁用复选框而变化。但是 manager.endless
的状态永远不会改变,并在游戏开始时设置为 true/false。
这会导致您在切换复选框时实际上并未更改 PlayerPrefs
变量。
示例:
private void Start() {
// Check if we enabled or disabled the endlessToggle Checkbox last time we played
// and set the checkbox accordingly.
endLessToggle.isOn = (PlayerPrefs.GetInt("Endless", 1) == 0);
}
// Call when we toggle the Checkbox.
public void OnToggleEndless() {
// Get the current state of our toggle button.
int enable = endLessToggle.isOn ? 1 : 0;
// Log result into console to test it.
Debug.Log("We set Endless to: " + enable);
// Set the PlayerPrefs equal to our current state.
PlayerPrefs.SetInt("Endless", enable);
}
我认为无论如何您都不需要使用 GameManager
中的全局变量,因为您已经拥有了 PlayerPrefs
,它可以为您做同样的事情。
此外,您需要在开始游戏时将 CheckBox 的状态设置为等于 PlayerPrefs
。