我有一个"数据包"隐藏在我的每个级别中,系统会记住每个级别是否已经采取了工件,如果是,它会在玩家重放时禁用工件,但我也想跟踪所采用的总量,系统几乎可以在那里工作&#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");
}
提前致谢:)
答案 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是一个全局变量。