我的播放器的状态如何不会在每次屏幕加载时重置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的播放器的状态如何不会在每次屏幕加载时重置?相关的知识,希望对你有一定的参考价值。

摘要重新开始游戏或进入下一个级别时,我的玩家的生活并没有重置为默认值。当我死一次,然后完成第一个级别。第二级加载,我从两个生命开始。当我死亡3次时,它将加载主菜单,而当我单击开始按钮时,它将以1点生命开始。

LayOut:Unity Hierarchy LayOut

目标:

重新/开始游戏/下一个关卡时,要让玩家的生命重置为3。

预期结果:

[玩家完成剩下2条生命的关卡。下一级应该加载,显示玩家有3条生命。

实际结果:

[玩家完成剩下2条生命的关卡。下一级显示玩家有2条生命而不是3条生命。

错误消息:

我尝试了什么我迷路了,这是我第一次创建游戏。玩家有多个生命的地方。

SpaceShip CODE:

public void completeSequence()
    
        player = playerState.Transcending;
        SFX.Stop();
        SFX.PlayOneShot(completed);
        death.Stop();
        victory.Play();
        Invoke("loadNextLevel", lvlLoadDelay);
    

    public void resetLvl()
    
        //print("Dead");
        player = playerState.Dying;
        SFX.Stop();
        SFX.PlayOneShot(dead);
        death.Play();
        Invoke("loadCurrentSccene", lvlLoadDelay);

    

    public void deadSequence()
    
        //print("Dead");
        player = playerState.Dying;
        SFX.Stop();
        SFX.PlayOneShot(dead);
        death.Play();
        Invoke("loadMainLevel", lvlLoadDelay);
    

    public void loadCurrentSccene()
    
        var currentScene = SceneManager.GetActiveScene().buildIndex;
        SceneManager.LoadScene(currentScene);
    

    public void loadMainLevel() 
    
        SceneManager.LoadScene(0);
    

    public void loadNextLevel()
    
        int currentScene = SceneManager.GetActiveScene().buildIndex;
        //print(currentScene);
        int nextScene = currentScene +1;
        SceneManager.LoadScene(nextScene);
    

    public void loadPreviousLevel()
    
        int currentScene = SceneManager.GetActiveScene().buildIndex;
        int nextScene = currentScene -1;
        SceneManager.LoadScene(nextScene);
    

GameSession代码:


    [SerializeField] int playerLives = 3;
    [SerializeField] Text livesText;

    private void Awake()
    
        int numSessions = FindObjectsOfType<gameSession>().Length;

        if (numSessions > 1)
        
            Debug.Log("I am the NOT Original");
            Destroy(gameObject);
        
        else
        
            Debug.Log("I am the Original");
            DontDestroyOnLoad(gameObject);
        

    

    // Start is called before the first frame update
    void Start()
    
        livesText.text = playerLives.ToString();
    

    public void initiateDeath()
    
        if (playerLives > 1)
        
            reduceLives();
        
        else
            
            FindObjectOfType<spaceShip>().deadSequence();
        
    

    public void reduceLives()
    
        playerLives--;
        FindObjectOfType<spaceShip>().resetLvl();
        livesText.text = playerLives.ToString();
    



答案

当前,playerLives正在初始化为3,并且每当调用reduceLives()时将其减小1。您的代码均未将playerLives设置回3,因此,当您输入新级别或调用deadSequence()时,生命将保持其先前的值。

GameSession添加一个重置方法,并且每当您想要将playerLives设置回3时都调用此方法(因此大概在deadSequence()completeSequence()的内部)将解决此问题。

public void ResetLives()

    playerLives = 3;
    livesText.text = playerLives.ToString();

以上是关于我的播放器的状态如何不会在每次屏幕加载时重置?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 我的动画只播放一次

Android 设定横屏,禁止屏幕旋转,Activity重置 [更新视频播放器相关]

iOS - 重置命令中心/远程播放器

方向改变后播放位置重置为零

更改屏幕方向时视频不会同时播放

视频即使发布也不会停止播放