【问题标题】:How to add game objects to an array in c#如何在c#中将游戏对象添加到数组中
【发布时间】:2016-12-11 08:27:47
【问题描述】:

您好,在我的游戏中,我有一系列包含在游戏中的所有枪支。我还有一系列游戏中可用的枪支。目前我正在遍历游戏中的所有枪支,如果它们被解锁,我会将它们添加到可用的枪支阵列中。出于某种原因,虽然我不知道如何将游戏对象添加到数组中。

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

【问题讨论】:

  • 任何你不能使用泛型的理由,即。列出 ?
  • 好吧,我更愿意将其保留为数组,但这是唯一的方法吗?我这样说是因为我需要从其他脚本中调用此列表,如果这样做,我将不得不在每个脚本中使用 System.Collections.Generic @scotru
  • 没有......@Stefan
  • 否,但您基本上需要重新创建 List 或 ArrayList 提供的功能。也就是说,您需要跟踪数组中使用的最后一个元素。数组在声明时具有固定长度集并且不是动态的。因此,长度将是您在创建数组时设置的长度。请参阅stackoverflow.com/questions/1056749/… 以查找最后使用的索引。您可以在这里使用一些 LINQ 扩展方法。
  • 非常感谢@scotru

标签: c# unity3d


【解决方案1】:

使用System.Collections.Generic.List&lt;Gun&gt; 而不是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];
         }
    }

}

【讨论】:

  • 这真的是@Bijan 我更愿意继续使用数组的唯一方法吗?
  • 如果你需要扩展一个集合,那么列表是唯一合理的方式。您还可以使用具有额外位置的数组。添加时检查是否有空插槽,如果没有,则必须创建更大的数组,复制所有项目等等。或者您可以使用列表。
  • 我不理解否决票,这是一个有效的答案。
  • @Peyton 如果 availableGuns 数组没有用 Guns 的长度初始化,它肯定会抛出 index out of bounds 异常。
  • wait 将 all array[ ] 等同于 availableGuns [ ] @Bijan
猜你喜欢
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 2017-10-06
相关资源
最近更新 更多