Unity,重新加载场景后保留变量中的值

时间:2020-07-21 04:23:41

标签: c# unity3d

我的地下城游戏东西,里面藏着一个目标,一旦玩家收集了目标,场景就会重新开始并创建一个新的地下城。我的游戏中有一个关卡计数器文本对象,用于显示玩家已完成的关卡数量,目前,场景重载后分数会恢复为0,但我希望每次玩家收集目标时分数都会增加。

此文件位于Character对象上,该对象是FPSController对象的子级,其他不相关的代码只是检查玩家是否掉进了一个洞而死亡。

    public static int levelCounter;
    public GameObject text;
    // Start is called before the first frame update
    void Awake()
    {
        levelCounter = text.GetComponent<LevelText>().level;
    }
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
        if (gameObject.transform.position.y < -1)
        {
            SceneManager.LoadSceneAsync("Death");
            levelCounter = 0;
        }
    }

这是在玩家收集目标,级别计数器增加和场景重新加载时运行的代码

    private AudioSource pickupSoundSource;

    void Awake() {
        pickupSoundSource = DontDestroy.instance.GetComponents<AudioSource>()[1];
    }

    void OnControllerColliderHit(ControllerColliderHit hit) {
        if (hit.gameObject.tag == "Pickup") {
            pickupSoundSource.Play();
            CharacterScript.levelCounter += 1;

            SceneManager.LoadScene("Play");
        }
    }

这是用于在游戏中实际显示级别计数器的文本对象

    public GameObject player;
    private Text text;
    public int level;
    // Start is called before the first frame update
    void Start()
    {
        level = 0;
        text = GetComponent<Text>();
    }

    // Update is called once per frame
    void Update()
    {
        level = CharacterScript.levelCounter;
        text.text = "Level: " + level;
    }

我尝试摆弄静态变量和DoNotDestroyOnLoad(),但似乎没有任何效果。

1 个答案:

答案 0 :(得分:-1)

有多种方法可以实现此目标,具体取决于您的需求。

1-如果您要在重新加载时保留变量值,而不是在重新启动游戏时保留变量值,则可以遵循单调模式,在这种情况下,您不会破坏具有保存该脚本的脚本的游戏对象。在清醒时通过调用DontDestroyOnLoad重新加载级别计数器,但是必须确保场景重新加载时没有同一个类的很多实例

2-使用单位PlayerPref存储值并在重新启动级别时加载它们

您可以在顶部查看重复的问题