繁体   English   中英

为什么我不能更改此数组中的元素

[英]Why can't I change elements in this array

在 Unity 中,我创建了五个 bool 列表并将它们放在一个锯齿状的数组中,如下所示(在我的游戏控制脚本中)。 我统一在inspector中初始化了5 List,所以代码中不需要初始化。 在运行时,我可以从检查器访问这些列表。

public class GameControl : MonoBehaviour {
    public static GameControl control;
        public List<bool>[] ascensionUpgrades;
        public List<bool> ascensionUpgrades_0;
        public List<bool> ascensionUpgrades_1;
        public List<bool> ascensionUpgrades_2;
        public List<bool> ascensionUpgrades_3;
        public List<bool> ascensionUpgrades_4;

    void Awake () {

            if (control == null) { 

                DontDestroyOnLoad (gameObject);
                control = this;

            } else if (control != this) {

                Destroy (gameObject);

            }

    ascensionUpgrades = new List<bool>[] {ascensionUpgrades_0, ascensionUpgrades_1, ascensionUpgrades_2, ascensionUpgrades_3, ascensionUpgrades_4};
    }

在游戏的某个时刻,我确实加载了一个新场景,由于 dontdestroyonload 命令,游戏控制仍然存在。 之后,当我想从另一个 scrupt 更改 bool 的值时,它看起来像这样:

GameControl.control.ascensionUpgrades[0][0] = true;
Debug.Log ("Upgrade changed_A?: " + GameControl.control.ascensionUpgrades[0][0]);
Debug.Log ("Upgrade changed_B?: " + GameControl.control.ascensionUpgrades_0[0]);

ascensionUpgrades_0[0] 的值未设置为 true。 但是当我打印 ascensionUpgrades[0][0] 的值时,确实如此。 我希望它们都是真的,因为我制作了锯齿状数组以更好地组织和访问 bool 列表。 调试日志不显示任何错误。 你能帮我找出问题出在哪里吗?

问题是 ascensionUpgrades 在 Awake 时只更新一次。 当您加载一个新场景时,不会在该脚本上再次调用 Awake,因此它将具有与以前相同的值。

可能的解决方案是创建一个方法,在您加载新场景时更新 ascensionUpgrades。 例如

SceneManager.LoadScene(1);
//change other ascensionUpgrades arrays here
GameControl.control.UpdateAscensionUpgrades();

然后在 GameControl 中,添加

public UpdateAscensionUpgrades(){
    ascensionUpgrades = new List<bool>[] {ascensionUpgrades_0, ascensionUpgrades_1, ascensionUpgrades_2, ascensionUpgrades_3, ascensionUpgrades_4};
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM