C# Playerprefs的问题

C# Playerprefs的问题,c#,unity3d,C#,Unity3d,我在我的每个关卡中都隐藏了一个“数据包”,系统会记住每一关卡上是否有神器被拿走,如果是这样的话,当玩家重放神器时,它会禁用神器,但我也想记录下被拿走的总量,系统几乎可以正常工作。只有一个小问题: 当我使用第一个数据包完成该级别时,在菜单中显示:1,这是正确的。 但是当我用第二个表示3,第三个表示4,第四个表示5等等 我不明白为什么,因此无法修复它 代码如下: function OnTriggerEnter(other : Collider) { if(other.CompareTag("

我在我的每个关卡中都隐藏了一个“数据包”,系统会记住每一关卡上是否有神器被拿走,如果是这样的话,当玩家重放神器时,它会禁用神器,但我也想记录下被拿走的总量,系统几乎可以正常工作。只有一个小问题: 当我使用第一个数据包完成该级别时,在菜单中显示:1,这是正确的。 但是当我用第二个表示3,第三个表示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");
    }

提前感谢:)

从所描述的行为来看,在某些情况下,在数据包被销毁之前,碰撞会被触发多次。与第2级一样,计数器从1传递到3

我的想法是,您的碰撞器有多个接触点,因此,如果您接触其中的n个,碰撞将被触发n次

我会尝试一个简单的实验,只是用一面旗帜来确定这是否是你第一次“触摸”对撞机;然后,在这种情况下,您将更新PlayerPref:

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

function Update(){
   collisionAlreadyConsidered = false;
}
,其中CollisionAlreadyConsided是一个全局变量