嗨,在我的游戏中,我有一系列包含在游戏中的枪支。我在游戏中也有一系列可用的枪支。目前我正在循环游戏中的所有枪支,如果它们被解锁,我会将它们添加到可用的枪支阵列中。出于某种原因,虽然我无法弄清楚如何将游戏对象添加到数组中。
public Gun[] guns;
public Gun[] availableGuns;
void Start(){
for (int i = 0; i < guns.Length; i++) {
if ((GameDataManager.publicInstance.gunAvailability & 1 << i) == 1 << i) {
availableGuns [i] = guns [i];
}
}
}
基本上我遇到了这行代码的问题:
availableGuns [i] = guns [i];
因为它不能像我一样,不希望可用的枪位于guns
数组中的同一位置,我只想将它添加到可用的枪阵列中。
注意:
我在检查员中编辑了guns[]
,而我在检查员中根本没有更改availableGuns[]
。
答案 0 :(得分:3)
使用System.Collections.Generic.List<Gun>
代替Gun[]
它使您能够在特定位置插入。
List<Gun> availableGuns;
...
availableGuns = new List<Gun>();
availableGuns.Insert(gun[i], i);
如果你想继续使用数组:
for (int i = 0; i < guns.Length; i++) {
if ((GameDataManager.publicInstance.gunAvailability & 1 << i) == 1 << i) {
//shift from i to the end
for(int j=guns.Length-2; j>=i; j--)
availableGuns[j+1] = availableGuns[j];
//set the index i
availableGuns[i] = guns[i];
}
}
}
请注意,它不会自动扩展数组的大小。
如果你想使用有限数量的枪支来获得可用枪支:
int j = 0;
for (int i = 0; i < guns.Length; i++) {
if ((GameDataManager.publicInstance.gunAvailability & 1 << i) == 1 << i) {
availableGuns[j++] = guns[i];
}
}
}