【发布时间】:2016-03-25 06:23:15
【问题描述】:
我有一个场景,我应该能够从项目列表中选择一个 3D 模型,然后将其加载到下一个场景中。我想根据本地数据库中已存储的内容以编程方式生成项目列表。但是我在获取要在场景中显示的项目列表时遇到问题...
所以我有一个项目类:
[System.Serializable] public class Item {
public string ObjectGuid;
public string Name;
public string Description;
public Sprite Icon;
public Button.ButtonClickedEvent SelectObject;
}
我的场景的脚本,其中包含项目列表和我调用以从数据库加载对象的方法:
public class ObjectSelectionScript : MonoBehaviour {
public List<Item> itemList;
public Transform contentPanel;
void LoadObjects() {
StreamReader str = new StreamReader (Application.persistentDataPath + "/" + DataManager.LOCATION_XML_PATH);
string result = str.ReadToEnd ();
str.Close();
var jo = SimpleJSON.JSON.Parse (result);
if (jo ["Objects"] != null) {
for (int i = 0; i < jo["Objects"].Count; i++) {
if (!string.IsNullOrEmpty(jo["Objects"][i]["FileGuid"])) {
Item newObject = new Item();
newObject.ObjectGuid = jo["Objects"][i]["ObjectGuid"];
newObject.Name = jo["Objects"][i]["Name"];
newObject.Description = jo["Objects"][i]["Description"];
//newObject.SelectObject = new Button.ButtonClickedEvent();
itemList.Add(newObject);
}
}
}
}
ModelObject 类:
public class ModelObject : MonoBehaviour {
public Button button;
public Text Name;
public Text Description;
public Image Icon;
}
还有一个包含名称、描述、缩略图的预制 ModelObjectPrefab,已添加到我的资产文件夹中。
PopulateList() 方法是我的问题。我无法初始化预制件,然后创建可以在界面中的 contentPanel 中放入的 ModelObjects。这是我的代码:
void PopulateList()
{
try {
foreach (var item in itemList)
{
GameObject newModel = Instantiate(ModelObject) as GameObject;
ModelObject myModelObject = newModel.GetComponent<ModelObject>();
myModelObject.Name.text = item.Name;
myModelObject.Description.text = item.IDescription;
myModelObject.icon.sprite = item.Icon;
myModelObject.button.onClick = item.selectObject;
newModel.transform.SetParent(contentPanel);
}
} catch (System.Exception ex) {
}
}
我目前在实例化时得到空指针。我尝试过 Resources.Load 和 Instatiate 方法的变体,但没有找到解决方案。
谁能给我一个提示是什么问题? PopulateList() 应该如何将项目获取到界面?
【问题讨论】:
-
尝试更改您的预制件的名称。它与类类型的名称相匹配,这绝不是一件好事。
-
试过了。还是不行。
-
谢谢。我只是不明白问题是什么,任何建议都可以工作
-
预制件不为空吗?它是否包含 ModelObject 组件?
-
预制件不包含模型对象。它有名称、描述和图像。
标签: c# list user-interface unity3d populate