防止变量在另一个场景负载下发生变化

时间:2019-06-20 09:10:32

标签: unity3d c#-4.0 game-engine

我是团结的新手,我正在尝试根据收集的物品加载场景。 问题是柜台没有计算我购买的物品。 我正在使用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 个答案:

答案 0 :(得分:1)

第一种方法: 不允许在场景加载时破坏对象 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);

第三种方法: 实施保存机制: 在您的情况下,我不建议这样做