从列表c#实例化对象

时间:2016-03-08 23:15:11

标签: c# list arraylist random

我是C#编程的初学者,我正在尝试Unity。

当我尝试从数组列表(列表)中实例化gameObject随机数,但是我有一个错误(磁带对象不能用作tope parapete T.)而我找不到解决方案。

我有6个游戏对象:

public gameobject Red;
public gameobject yellow;
etc... 

到6.

对于添加或远程对象,cont具有arraylist动态。像这样:

public ArrayList list = new ArrayList();

然后,我添加了游戏对象:

list.Add (Red);
list.Add(Yellow);

为了完成,我从arraylist(有时是不同数量的对象)中实例化随机对象

color = Instantiate(list[random.range(0, list.Length)]);

但未找到,并有此错误:

  

磁带对象不能用作tope parapete T.

2 个答案:

答案 0 :(得分:1)

这是一个关于从列表中选择随机项的问题。我建议使用List<T>而不是ArrayList。这是一个例子:

static void Main()
{
    var Red = new GameObject();
    var Yellow = new GameObject();

    List<GameObject> gameObjects = new List<GameObject>() { Red, Yellow };
    var randomGameObject = gameObjects[(new Random()).Next(gameObjects.Count)];

    // color = Instantiate(randomGameObject)

    //Console.WriteLine(randomGameObject);
    Console.ReadLine();
}

答案 1 :(得分:0)

Instantiate方法可能是这样声明的:

Color Instantiate(GameObject gameObject)
{
    // ...
}

ArrayList不是强类型的,即它返回object类型的项目。因此,您必须将项目转换为GameObject

color = Instantiate((GameObject)list[random.range(0, list.Length)]);

但更好的解决方案是使用强类型通用列表List<GameObject>。它与ArrayList非常相似,但会返回键入GameObject的项目。

public List<GameObject> list = new List<GameObject>();
list.Add(Red);
list.Add(Yellow);

color = Instantiate(list[random.range(0, list.Count)]);