【发布时间】:2021-10-22 17:21:52
【问题描述】:
TL;DR:我需要一种方法来复制带有整数的数组,其中副本不会更改原始数组,并且可以在 Unity 中使用。
我正在尝试实现以下算法:我有一个数组字段,其中包含可在检查器中编辑的数字。这些数字表示要生成的每种类型的敌人的数量:
public int[] EnemiesToSpawn;
还有,比如我把数组设置为3位,数组中每个的索引对应于数组中带有敌人prefab的对象的索引。
然后,在函数中,我随机生成敌人,每次将数组中对应的数字减一(如果元素整数为0,则选择另一个敌人,如果所有元素的整数都为0,则生成函数结束执行)。
一切都很顺利,直到我需要在关卡上设置多个点,每个点都会独立生成敌人。我做了什么:我添加了另一个数组,每次我需要在新的点产生敌人时,我都会从第一个数组中复制值,并编辑这个特定的第二个数组而不是原始数组(只需分配值通过“=”)。当然不行,我google了一下,发现C#中的数组是作为引用存储的,而不是值,所以原来的数组也被编辑了。
我尝试了很多提供正确复制的选项(例如 System.Array.Copy 等),但由于某种原因,它们都不能在 Unity 中工作。 我自己想出的唯一办法就是循环迭代并分别赋值:
EnemiesToSpawnCurrent = new int [EnemiesToSpawn.Length];
for (int i = 0; i <EnemiesToSpawn.Length; i ++)
{
EnemiesToSpawnCurrent [i] = i;
}
但是,由于某种原因,此代码也无法正常工作,数字与检查器中输入的数字不对应(很可能元素的索引不匹配)。 如果您能告诉我如何以最佳方式解决此问题,我将不胜感激。
【问题讨论】:
-
你可能会提到
EnemiesToSpawnCurrent[i] = EnemiesToSpawn[i];..这会使这个问题基本上基于一个错字......