0

在我的游戏中,玩家应该能够从菜单中选择单位,这些单位将在以后用于(放置)各种场景中。

为此,我想通过代码将单元预制件保存在静态数组中。
然后我想访问这些预制件,以显示它们在附加脚本中声明的一些变量(如名称、电源和缩略图纹理)以显示在 UI 上。稍后,我想将它们实例化到场景中。

到目前为止,我未能将这些预制件保存到阵列中。

我的代码:

//save to array
if (GUI.Button(Rect(h_center-30,v_center-30,50,50), "Ship A")){
    arr.Push (Resources.Load("Custom/Prefabs/Ship_Fighter") as GameObject);
}

//display on UI
GUI.Label (Rect (10, 10, 80, 20), arr[i].name.ToString());

从最后一行,我得到这个错误:

<i>" 'name' is not a member of 'Object'. "</i>

那么,我的错误在哪里?我是否忘记了什么或声明错误,或者我的方法一开始就无效(即,无法以这种方式保存/访问预制件;另一种类型的列表更适合此任务)。

4

1 回答 1

0

您声明了没有类型的数组。您可以将数组声明为GameObjects 列表,也可以在提取元素时强制转换它们。

类型转换的示例:

GUI.Label (Rect (10, 10, 80, 20), ((GameObject)arr[i]).name.ToString());    

// which is equivalent to
GameObject elem = (GameObject)arr[i];
GUI.Label (Rect (10, 10, 80, 20), elem.name.ToString());

使用通用列表的示例:

// Add this line at the top of your file for using Generic Lists
using System.Collections.Generic;

// Declare the list (you cannot add new elements to an array, so better use a List)
static List<GameObject> list = new List<GameObject>();

// In your method, add elements to the list and access them by looping the array
foreach (GameObject elem in list) {
    GUI.Label (Rect (10, 10, 80, 20), elem.name.ToString());
}

// ... or accessing by index
GameObject[] arr = list.ToArray;
GUI.Label (Rect (10, 10, 80, 20), arr[0].name.ToString());
于 2015-01-29T10:11:40.347 回答