2016-07-27 68 views
1

我在Android上遇到PlayerPrefs问题。我希望我的教程只显示一个时间,所以我写了这个代码:PlayerPrefs不适用于Android或编辑器

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

一旦建成,并在手机测试中,APK不会创建任何文件夹/数据或什么的,因此,将教程每次展示我运行游戏。

+0

尝试登录hasPlayed'的'值。你也可以尝试在'GetInt(“hasPlayed”,0)中添加第二个参数;'确保你得到0作为默认值。 –

+0

你只是忘了GetInt上的“,0” – Fattie

回答

1

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

@Cabrra是的,可以使用'PlayerPrefs.HasKey'。我实际上使用了'PlayerPrefs.GetInt',这样可以扩展更多。例如,大多数游戏在每个级别都有不同的教程。上面的代码可以很容易地扩展到通过添加'else if(PlayerPrefs.GetInt(“hasPlayed”,0)== 2)'来检查玩家最后播放哪个教程以及下一个播放哪个教程。您可以添加尽可能多的教程。 'PlayerPrefs.HasKey'不能单独做这件事,并且仍然需要'PlayerPrefs.GetInt'结合它,这会使代码变得更长。 – Programmer

+0

另外'GetInt(string key,int defaultValue);'在引擎盖中执行'PlayerPrefs.HasKey'。它缩短了代码。只有当你想知道密钥是否存在时才需要'PlayerPrefs.HasKey'。在我的情况下,我想知道它是否存在,并且也可以在不使用两个函数的情况下获取值。 – Programmer

+1

完美,这句话:PlayerPrefs.GetInt(“hasPlayed”,0)== 1做了这个把戏。非常感谢! – user1423168

相关问题