在更改场景时在场景中传输布尔值

问题描述

对于我的游戏,您需要完成一个小游戏才能解锁能力。但我完全不知道如何去做,因为每当我加载主级别时,值都会被重置为 false。 代码播放器移动:

static bool FistAttackEnabled;

void Update ()
{
        if (FistAttackEnabled == true)
        {
            if (Input.GetMouseButtonDown(0))
            {
                Debug.Log("Attack");
                PlayerMovement.SetFloat("Attacking",1f);
                HitArea.SetActive(true);
            }
        }
}

代码小游戏:

    void Start()
    {
        FistAttackEnabled = Player.GetComponent<Player_Movement>().FistAttackEnabledPortable;
    }
    void Update()
    {         
            if (SheepsAmountGuess == NeededAni)
            {
                FistAttackEnabled = true;
            }
    }

但这行不通。我尝试制作一个可移植的 bool (FistAttackEnabledStatic = FistAttackEnabled) 因为您不能跨脚本传输静态 bool 值,但这也不起作用。有人知道怎么做吗?

PS:代码较大,但与攻击无关。

解决方法

每次加载场景时都会重新加载脚本,因此变量将进入“默认”状态

您可以通过使用DontDestroyOnLoad(this.gameObject);

避免破坏游戏对象

由于每次重新加载场景时GameObject都不会被删除,因此会创建一个新副本来解决您应该使用单例的问题(查找它会很容易找到信息)

这两件事都会暂时解决问题,但是一旦您关闭游戏,一切都会恢复到原始状态。您应该使用某种方法来保存进度,PlayerPrefs 是一种非常简单的方法。