2014-10-13 3 views
1

У меня есть «datapack», скрытый на каждом из моих уровней, система запоминает за уровень, если артефакт был взят, и если он отключает артефакт, когда игрок воспроизводит его, но я также хочу отслеживать общая сумма взята, система почти работает, есть всего одна маленькая проблема: Когда я заканчиваю уровень с первого датапака, в меню говорится: 1, это правильно. , но когда я делаю это с 2-го, она говорит 3, с 3-он говорит 4, 4 говорит 5 и т.д. я не понимаю, почему и, следовательно, не может исправить это вот код:issue with Playerprefs

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

Я уже прокомментировал часть, я считаю, что это тоже было частью проблемы.

и часть 2-го сценария:

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

Заранее спасибо :)

ответ

1

Из описанного поведения кажется, что в некоторых случаях столкновение срабатывает несколько раз, прежде чем datapack уничтожается. Как и в 2-го уровня, на котором счетчик проходит от 1 до 3.

Мой, однако, что ваш коллайдер имеет несколько точек контакта, так что - если вы прикасается н из них - столкновение срабатывает п раз.

Я бы попробовал простой эксперимент, просто используйте флаг, чтобы определить, когда вы впервые касаетесь коллайдера; Затем, вы будете обновлять PlayerPref только в том случае:

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

function Update(){ 
    collisionAlreadyConsidered = false; 
} 

, где collisionAlreadyConsidered является глобальной переменной.