Playerprefs的问题

时间:2014-10-13 17:40:15

标签: c# unity3d

我有一个"数据包"隐藏在我的每个级别中,系统会记住每个级别是否已经采取了工件,如果是,它会在玩家重放时禁用工件,但我也想跟踪所采用的总量,系统几乎可以在那里工作&#39 ; s只是一个小问题: 当我用第一个数据包完成关卡时,在菜单中显示:1,这是正确的。 但是,当我用第二个做它时,它说3,第三个它说4,第4个说5等 我不明白为什么,因而无法修复它 这是代码:

function OnTriggerEnter(other : Collider) {
    if(other.CompareTag("DataPacket")){
    pickedUpDataPacket = 1; 
    Destroy(other.gameObject);
    gameObject.Find("DatapackFound").guiText.enabled = true;
    yield WaitForSeconds (1.5);
    gameObject.Find("DatapackFound").guiText.enabled = false;
    }
    if(other.CompareTag("Finish") && pickedUpDataPacket == 1){
    PlayerPrefs.SetInt("DataPackLevel" + levelindex.ToString(), 1);
    //if(!PlayerPrefs.HasKey("totalDatapacks")){
    //PlayerPrefs.SetInt("totalDatapacks", 1);
    //} else {
    PlayerPrefs.SetInt("totalDatapacks", (PlayerPrefs.GetInt("totalDatapacks")+1));
    } 
    }
//}

我已经评论了一部分,我相信这也是问题的一部分。

和第二个脚本的一部分:

if(datapacktotal){
    if(PlayerPrefs.GetInt("totalDatapacks") > 0){
        findText.text = "Collected:" + PlayerPrefs.GetInt ("totalDatapacks");
    }

提前致谢:)

1 个答案:

答案 0 :(得分:1)

在描述的行为中,似乎在某些情况下,在数据包被破坏之前,碰撞被多次触发。如在第2级中,计数器从1变为3。

我的对手有多个接触点,所以 - 如果你接触到它们的 n - 会触发碰撞 n 次。

我会尝试一个简单的实验,只需使用一个标记来判断你第一次触摸"对撞机;然后,在这种情况下,您将更新PlayerPref:

function OnTriggerEnter (other : Colliderstrong text){
   if (collisionAlreadyConsidered) return;
   collisionAlreadyConsidered = true;
   // your code here...
}

function Update(){
   collisionAlreadyConsidered = false;
}

,其中collisionAlreadyConsidered是一个全局变量。