c# - PlayerPrefs 不适用于 Android 和编辑器

标签 c# android unity-game-engine game-engine

我在 Android 上遇到 PlayerPrefs 问题。我希望我的教程只显示一次,所以我编写了这段代码:

void Awake(){
        firstTime = false;
        hasPlayed = PlayerPrefs.GetInt ("hasPlayed");
        if (hasPlayed == 0) {
            firstTime = true;
        } else {
            PlayerPrefs.SetInt ("hasPlayed", 1);
            firstTime = false;
            PlayerPrefs.Save ();
        }
}

在手机上构建和测试后,apk 不会在/data 或其他任何地方创建任何文件夹,因此,每次我运行游戏时都会显示教程。

最佳答案

PlayerPrefs.GetInt 采用另一个参数,如果提供的键不存在,您可以使用该参数返回一个值。检查 hasPlayed 键是否存在,默认值为 0。如果键不存在,它将返回默认值 0

如果它返回 0,请将 hasPlayed 设置为 1,然后播放您的教程。如果返回1,则表示该教程之前已经播放过。类似于 this问题,但需要一点点修改。

它应该是这样的:

void Start()
 {
     //Check if hasPlayed key exist. 
     if (PlayerPrefs.GetInt("hasPlayed", 0) == 1)
     {
         hasPlayed();
     }
     else
     {
         //Set hasPlayed to true
         PlayerPrefs.SetInt("hasPlayed", 1);
         PlayerPrefs.Save();

         notPlayed();
     }
 }


 void hasPlayed()
 {
     Debug.Log("Has Played");
     //Don't do anything
 }

 void notPlayed()
 {
     Debug.Log("Not Played");
     //Play your tutorial
 }

 //Call to reset has played
 void resetHasPlayed()
 {
     PlayerPrefs.DeleteKey("hasPlayed");
 }

关于c# - PlayerPrefs 不适用于 Android 和编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38620217/

相关文章:

c# - 恢复下载

c# - 自定义文本框控件

android - 构建已签名的 APK 失败

c# - Unity中如何检测哪个粒子与刚体发生碰撞?

c# - 可序列化会影响性能吗?

c# - 无法加载 DLL ‘ABCpdf9-32.dll’。找不到指定的模块(HRESULT 异常 : 0x8007007E)

android - 工具栏中的主页按钮出现问题

java - 如何安排我的 Android 应用程序每小时做一些事情

java - Google Play 游戏无法再次登录

animation - 如何使用新的Unity4.3 2D框架正确翻转2D角色? (动画期间游戏对象的旋转)