如何在c#中将游戏对象添加到数组中

时间:2016-12-11 08:27:47

标签: c# unity3d

嗨,在我的游戏中,我有一系列包含在游戏中的枪支。我在游戏中也有一系列可用的枪支。目前我正在循环游戏中的所有枪支,如果它们被解锁,我会将它们添加到可用的枪支阵列中。出于某种原因,虽然我无法弄清楚如何将游戏对象添加到数组中。

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[]

1 个答案:

答案 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];
         }
    }

}