Предотвращение изменения переменной при загрузке другой сцены - PullRequest
0 голосов
/ 20 июня 2019

Я новичок в единстве, и я пытаюсь загрузить сцены на основе собранных предметов.Проблема в том, что счетчик не считает мои приобретенные предметы.Я использую OnTriggerEnter2D(), чтобы вызвать событие;Ниже приведен фрагмент:

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        collectionNumber += 1;
        Destroy(gameObject);
        if (collectionNumber == 1)
        {
            collision.gameObject.transform.Find("Acquired_Items").GetChild(0).gameObject.SetActive(true); 
            qiCollector.gameObject.transform.GetChild(0).gameObject.SetActive(true);
        }
        else if (collectionNumber == 2)
        {
            collision.gameObject.transform.Find("Acquired_Items").GetChild(1).gameObject.SetActive(true);
            qiCollector.gameObject.transform.GetChild(1).gameObject.SetActive(true);
        }
        else if (collectionNumber == 3)
        {
            collision.gameObject.transform.Find("Acquired_Items").GetChild(2).gameObject.SetActive(true);
            qiCollector.gameObject.transform.GetChild(2).gameObject.SetActive(true);
        }
        else
        {
            Debug.LogWarning("All Items Collected !!");
        }

        cN.text = "Collection Number " + collectionNumber.ToString();
    }
}

Когда загружается новая сцена, этот скрипт загружается, потому что он находится в моем квестовом предмете.И для каждой сцены есть квестовый предмет.Итак, что я хочу сделать, так это отслеживать мой collectionNumber, но он сбрасывается до 0.

Любая помощь очень ценится:)

1 Ответ

1 голос
/ 20 июня 2019

Первый метод : Не позволяйте вашему объекту быть разрушенным при загрузке сцены https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

public static void DontDestroyOnLoad(Object target);

Приведенный выше код предотвратит уничтожение вашего GameObject и его компонентов от разрушения при загрузке новой сцены, таким образом, ваш скрипт имеет значения

Второй метод : Запишите свое единственное значение в префе игрока https://docs.unity3d.com/ScriptReference/PlayerPrefs.html

// How to save the value
PlayerPrefs.SetInt("CollectionNumber", collectionNumber);
// How to get that value
collectionNumber = PlayerPrefs.GetInt("CollectionNumber", 0);

Третий метод : Реализуйте механизм сохранения: В вашем случае я бы не предложил это

...