场景加载时物体被破坏

时间:2020-06-27 11:55:30

标签: c# unity3d

我目前正在开发一个2d平台游戏,以添加到我的投资组合中,我遇到了一个问题,希望有人可以帮助我

我在商店的一分钟有一个按钮,当单击以换取1000个硬币时,该按钮会增加1条生命,如果玩家没有足够的硬币来购买另一条生命,该按钮将停止工作,一切正常。

如果我直接加载到商店场景中,则没有问题,一切都会正常进行,但是,如果我在完成后从某个级别加载到商店场景中,则“单击”按钮上的脚本将被破坏,因此使按钮无法操作。

我正在使用游戏会话脚本来控制商店,投币游戏等,为此添加了一些内容,我认为这是在破坏按钮与脚本之间的联系。在关卡中,游戏会话脚本说要在与玩家碰撞时破坏硬币对象,但是当我将游戏会话脚本“链接”到商店场景上的按钮时,它会在加载时被破坏,从而使按钮无法使用。我当前的代码如下:

private void Awake()
{
    {
        int numGameSessions = FindObjectsOfType<GameSession>().Length;
      
        if (numGameSessions > 1)
        {
            Destroy(gameObject);
        }

        else
        {
            DontDestroyOnLoad(gameObject);
        }
    }
    
}

void Start()
{
    livesText.text = playerLives.ToString();
    scoreText.text = score.ToString();
}


private void TakeLife()
{
    playerLives--;
    var currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
    SceneManager.LoadScene(currentSceneIndex);
    livesText.text = playerLives.ToString();
}


public void AddToScore(int pointsToAdd)
{
    score += pointsToAdd;
    scoreText.text = score.ToString();
}

public void AddPlayerLives (int livesToAdd)
{
    if (score >= 1000)
    {
        playerLives++;
        livesText.text = playerLives.ToString();
        AddToScore(LifeCost);
    }

    else
    {
        return;
    }
}

public void ProcessPlayerDeath()
{
    if (playerLives >= 1)
    {
        TakeLife();
    }

    else
    {
        SceneManager.LoadScene("Game Lose");
    }
}

private void ResetGameSession()
{
    SceneManager.LoadScene(0);
    Destroy(gameObject);
}

}

谢谢

2 个答案:

答案 0 :(得分:0)

将唤醒脚本更改为此,因为当前仅在游戏会话数小于1时设置DontDestroyOnLoad(gameObject);。如果检查{{1,则还可以检查该对象的实例。 }}

instane == null

答案 1 :(得分:0)

感谢您的答复,我最终以另一种方式整理了我的问题,即为商店创建了一个新脚本,然后使用它来控制它。

再次感谢您