将预制件保存到数组

Save prefabs to array

在我的游戏中,玩家应该能够从菜单中 select 单位,稍后将在各种场景中使用(放置)。

为此,我想通过代码将单元预制件保存在静态数组中。
然后我想访问这些预制件,以显示它们在附加脚本中声明的一些变量(如名称、功率和缩略图纹理)以显示在 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>

所以,我的错误在哪里?我是不是忘了什么或声明错了,还是我的方法一开始就无效(即预制件不能这样 saved/accessed;另一种类型的列表更适合这项任务)。

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

类型转换示例:

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());