2016-12-11 9 views
1

私のゲームでは、ゲームに含まれるすべての銃の配列があります。私はまた、ゲームに利用可能な銃の配列を持っています。現在、私はゲーム内のすべての銃をループしています。ロックが解除されていれば、それらを使用可能な銃の配列に追加します。何らかの理由で、ゲームオブジェクトを配列に追加する方法がわかりません。それは同様に私は、それはしていた同じ位置にあることが可能な銃を望んでいないと動作しないのでCで配列にゲームオブジェクトを追加する方法

availableGuns [i] = guns [i]; 

:ので、基本的に、私はこのコード行で問題が発生しています

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

    } 

gunsアレイ私はそれを利用可能なガン配列に追加したいだけです。

注:

私はインスペクタで全くavailableGuns[]を変更しなかったのに対し、インスペクタでguns[]を編集しました。

+0

あなたの代わりにジェネリックを使用することはできません任意の理由、すなわち。リスト? – scotru

+0

私はそれを配列に保つことを好むでしょうが、それは唯一の方法でしょうか?私は他のスクリプトからこのリストを呼び出す必要があるので、私はこれを言う。もし私がそうするなら、私はSystem.Collections.Genericを各自で使う必要がある@scotru – Peyton

+0

いいえ............. @ Stefan – Peyton

答えて

3

代わりGun[]

の使用System.Collections.Generic.List<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

あなたがコレクションを拡張する必要があるなら、ye Listは唯一合理的な方法です。余分な場所に配列を使用することもできます。あなたが空のスロットを持っているかどうかをチェックし、大きなアレイを作成しなければならない場合は、すべてのアイテムをコピーします。リストを使用することもできます。 – Everts

関連する問題