2016-03-08 101 views
1

我是用C#編程的初學者,我在嘗試Unity。從列表c實例化對象#

當我試圖從數組列表(列表)中實例化一個gameObject隨機數,但是我有一個錯誤(磁帶對象不能用作Tope Parapete T.),我找不到解決方案。

我有6個gameobjects:

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

至6

ý續有動態爲附加或遠程對象的數組列表。就像這樣:

public ArrayList list = new ArrayList(); 

然後,我添加了gameobjects:

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'解決現有的解決方案,並建議使用'List '作爲更好的解決方案。 –