![](/img/trans.png)
[英]Why can't I change elements from a linq IEnumerable in a for loop?
[英]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.