【问题标题】:Why can't I change elements in this array为什么我不能更改此数组中的元素
【发布时间】:2020-01-07 17:09:01
【问题描述】:

在 Unity 中,我创建了五个布尔值列表,并将它们放在一个锯齿状数组中,如下所示(在我的游戏控制脚本中)。我统一初始化检查器中的 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 命令,游戏控制仍然存在。之后,当我想从另一个脚本更改布尔值时,它看起来像这样:

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] 的值时,这确实是真的。我希望它们都是真的,因为我制作了锯齿状数组以更好地组织和访问布尔列表。调试日志不显示任何错误。你能帮我找出问题所在吗?

【问题讨论】:

  • 请提供minimal reproducible example。我怀疑您正在重新初始化 ascensionUpgrades_0 以在某个时候引用不同的列表。
  • 请发布显示您的问题的代码,因为您发布的内容会引发异常。
  • 不可重现
  • 我添加了更多细节,这应该是可复制的。我怀疑这可能与加载场景有关。
  • 我试图解释我正在初始化检查器中的列表,这是默认的统一功能。我不确定如何解释,因为没有初始化列表的代码,我不想编写代码。如果我不应该在这里问统一问题,这是可以理解的,但仍然很奇怪,因为我可以选择指定这是一个与 unity3d 相关的问题并且这样做了。

标签: c# arrays unity3d


【解决方案1】:

问题在于 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};
}

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 2022-06-13
    • 2021-11-28
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 2019-10-16
    • 2019-10-13
    • 2016-10-15
    相关资源
    最近更新 更多