2016-12-11 3 views
1

Привет, в моей игре У меня есть набор всех орудий, включенных в игру. У меня также есть массив доступных орудий в игре. В настоящее время я перебираю все оружие в игре, и если они разблокированы, я добавлю их в доступный массив орудий. По какой-то причине, хотя я не могу понять, как добавить игровой объект в массив.Как добавить игровые объекты в массив в C#

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

какой-либо причине вы не можете использовать дженерики вместо этого, то есть. Список ? – scotru

+0

ну, я бы предпочел сохранить массив, но это был бы единственный способ? Я говорю это, потому что мне нужно вызвать этот список из других сценариев, и если я это сделаю, мне придется использовать System.Collections.Generic в каждом @scotru – Peyton

+0

no ............. @ Stefan – Peyton

ответ

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

} 

Обратите внимание, что он не будет автоматически увеличивать размер массива.

Если вы хотите использовать ограниченное количество пушек для availableGuns:

int j = 0; 
for (int i = 0; i < guns.Length; i++) { 
     if ((GameDataManager.publicInstance.gunAvailability & 1 << i) == 1 << i) { 
      availableGuns[j++] = guns[i]; 
     } 
    } 

} 
+0

действительно ли это будет единственным способом @Bijan, поскольку я предпочел бы продолжать использовать массив? – Peyton

+0

конечно нет. Я добавил код – Bijan

+0

Если вам нужно расширить коллекцию, то вы List - единственный рациональный способ. Вы также можете использовать массив с дополнительным местоположением. При добавлении вы проверяете, есть ли у вас пустой слот, и если нет, вам нужно будет создать большой массив, скопируйте все элементы и так далее. Или вы можете использовать Список. – Everts

Смежные вопросы