C# PlayerPrefs不在Android或编辑器上工作

C# PlayerPrefs不在Android或编辑器上工作,c#,android,unity3d,game-engine,C#,Android,Unity3d,Game Engine,我对Android上的PlayerPrefs有问题。我希望我的教程只显示一次,因此我编写了以下代码: void Awake(){ firstTime = false; hasPlayed = PlayerPrefs.GetInt ("hasPlayed"); if (hasPlayed == 0) { firstTime = true; } else { PlayerPrefs.Set

我对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
,这意味着该教程以前已经播放过。类似于问题,但需要稍加修改

下面是它的外观:

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");
 }

尝试记录
hasPlayed
的值。您还可以尝试将第二个参数添加到
GetInt(“hasPlayed”,0)以确保获得0作为默认值。您只是忘记了上的“、0”GetInt@Cabrra是的,
PlayerPrefs.HasKey
可以使用。事实上,我特意使用了
PlayerPrefs.GetInt
,这样可以进一步扩展。例如,大多数游戏都有不同的级别,每个级别都有教程。通过添加
else if(PlayerPrefs.GetInt(“hasPlayed”,0)==2),可以很容易地扩展上面的代码,以检查播放器上一次播放的教程和下一次播放的教程。您可以添加尽可能多的教程
PlayerPrefs.HasKey
无法单独完成此操作,仍然需要将
PlayerPrefs.GetInt
与它结合使用,这会使代码变长。另外
GetInt(字符串键,int defaultValue)在发动机罩中执行
PlayerPrefs.HasKey
。它缩短了代码
PlayerPrefs.HasKey
仅当您只想知道该键是否存在时才需要。在我的例子中,我想知道它是否存在,并在不使用两个函数的情况下获取值。完美,这条语句:PlayerPrefs.GetInt(“hasPlayed”,0)==1完成了这项任务。谢谢!