将预制件保存到数组
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());
在我的游戏中,玩家应该能够从菜单中 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());