2016-03-08 2 views
1

Я новичок в программировании на C#, и я пробую Unity.Объект из списка C#

Когда я пытаюсь создать экземпляр gameObject случайного из списка (списка) массива, но у меня есть ошибка (объект ленты не может использоваться как tope parapete T.), и я не нашел решение.

У меня 6 геймобжекты:

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

до 6.

у прод есть ArrayList динамический для добавления или удаленного объекта. Как это:

public ArrayList list = new ArrayList(); 

Затем я добавляю геймобжекты:

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

И закончить, я создаю экземпляр случайных объектов из ArrayList (иногда различное число объектов)

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

Но не найдено и имеют следующую погрешность:

The tape object cannot be used as tope parapete T.

+4

Для начала я думаю, что это может помочь не использовать 'ArrayList', а вместо этого' List '. Это означает, что вы используете строго типизированный список, и это может решить по крайней мере некоторые из ваших проблем для вас. – Enigmativity

+0

Вы также должны показать нам код метода 'Instantiate'. – Enigmativity

ответ

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

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)]); 
+0

Разъясняется лучше, но я считаю, что вы терпимы к использованию ArrayList. На вашем месте я не предлагаю решение с использованием ArrayList – Coding4Fun

+1

Я не предлагаю решение с 'ArrayList'. Я показываю, как существующее решение, использующее 'ArrayList', может быть исправлено и предлагает использовать вместо него« Список »вместо этого. –

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