【发布时间】: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 相关的问题并且这样做了。