【问题标题】:using Playerprefs on Android Mobile Platform for unity在 Android 移动平台上使用 Playerprefs 实现统一
【发布时间】:2020-05-11 07:17:59
【问题描述】:

我有一个关于我的 android 手机游戏的 playerprefs 没有正确初始化的问题。我已经在一个值为 3 的变量上预先设置了我的 playerprefs 数据。在我的统一播放模式中,该值通过我编写脚本的文本网格显示为 3。但是当我在我的 android 移动设备上安装和测试它时,它是 0。有人可以帮助如何在 android 平台上将我的 playerprefs 数据正确初始化为正确的值吗?


public static Game GM;
int maxAntiBody;
public TextMeshProUGUI antibodyTexMesh;

void Start () {
if (GM == null)
{
    GM = this;
}
maxAntiBody = PlayerPrefs.GetInt("MaxAntiBody");
antibodyTexMesh.text = maxAntibody.toString();
}

void Update () {
 debugging();
}

 //I use this method for setting or resetting my desired value for the 
playerprefs data I'm working with. In this case I choose 3 as a value.

void debugging() {
if (Input.GetKeyDown(KeyCode.M))
{

    PlayerPrefs.SetInt("MaxAntiBody", plus++);
    Debug.Log("max anti body value is : " + 
 PlayerPrefs.GetInt("MaxAntiBody"));
}
else if (Input.GetKeyDown(KeyCode.R))
{
    plus = 0;
    PlayerPrefs.SetInt("MaxAntiBody", plus);
    Debug.Log("max anti body is now reseted to : " + 
  PlayerPrefs.GetInt("MaxAntiBody"));
}
}

【问题讨论】:

  • 快速提醒; playerprefs 存储在设备上 - 因此您在 Windows 上的编辑器中所做的更改会存储到磁盘上的某个文件夹中。您的 android 设备将没有该文件 - 因此每个环境的更改都是唯一的

标签: c# unity3d game-engine


【解决方案1】:

只有在按下 M 或 R 键(在您的调试方法中)时,您才会设置播放器首选项。

如果您希望该值具有默认值,则应将其添加到您的 Start();

类似的东西;

void Start()
{

    // Set the MAxAntiBody to 3 if the value was never set to an initial value
    if(PlayerPrefs.GetInt("MaxAntiBody") == default(int))        
        PlayerPrefs.SetInt("MaxAntiBody", 3);

    ...

}

编辑:正如 cmets 中指出的,您还可以执行以下操作:

var x = PlayerPrefs.GetInt("MaxAntiBody", 3);

如果存在,则返回与首选项文件中的键对应的值。如果不存在,则返回defaultValue。

如果GetInt() 返回默认值 (0),请不要认为第一段代码实际上创建了密钥 - 但第二个示例可能不会。这取决于GetInt(string, int) 的实现 - 如果它不存在,我不确定它是否会创建密钥。

【讨论】:

  • 对不起。我的错。但为什么不改为PlayerPrefs.GetInt( key , default_value );
  • default(int) 只是写0 的很长的路要走,即不保证这个值之前没有设置
  • @AndrewŁukasik 非常感谢您尝试解决这个问题! :)。无论您使用default(int) 还是0 都只是有点味道。我认为使用这两种方法都没有害处。在这种特殊情况下,我个人使用了default(int),因为我希望读者知道我正在与默认值而不是值(0)进行比较。它增加了一些可读性,我立即明白我正在比较默认值,所以我可以更快地知道我在这里做什么。至于PlayerPrefs.GetInt(string, int),我不知道它的存在。我个人认为两者都不值得反对。
猜你喜欢
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 2010-12-16
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
相关资源
最近更新 更多