【发布时间】:2016-06-11 07:28:29
【问题描述】:
我在我的项目中遇到了一个问题,我正在创建一个滚动列表视图来显示屏幕中列表中存在的所有元素。 我正在使用面板中的按钮来显示列表。 现在,当我调用 ShowList() 时,它会显示列表中的元素。
但是,如果我将一些对象添加到列表中并再次调用 ShowList(),那么它也会克隆先前的对象,因为存在实例化对象。
为了解决这个问题,我正在使用 Destroy() 删除克隆,但是当列表包含太多项目 (300~400) 时,删除它们会导致游戏延迟。如何为 ui 按钮创建对象池或只是停用它们。
public class two : MonoBehaviour {
public GameObject Button_Template;
private List<GameName> gm = new List<GameName>();
public void Exit()
{
var og = GameObject.FindGameObjectsWithTag("clone");
for (int i = 0; i < og.Length; i++)
{
Destroy(og[i]);
}
}
void Start()
{ gm.Add(new GameName("1"));
gm.Add(new GameName("2"));
gm.Add(new GameName("3"));
gm.Add(new GameName("4"));
}
public void ShowList()
{
for (int i = 0 ; i < gm.Count; i++)
{
GameObject go = Instantiate(Button_Template) as GameObject;
go.SetActive(true);
one TB = go.GetComponent<one>();
TB.SetName(gm[i].GName);
go.transform.SetParent(Button_Template.transform.parent);
go.tag = "clone";
}
}
}
【问题讨论】:
-
有没有可能,简单地说,您需要开始使用预制件?
-
我尝试过使用预制件,但它仍然滞后,因为我正在实例化超过 500 个项目的按钮。当我使用 OnGui 时,它可以正常工作但我在某处读到的总是使用画布而不是 gui
-
您应该使用 Programmer 提供的出色解决方案。没有理由你应该拥有“500”的任何东西。如果你这样做,你必须使用 pooling。这是您了解它的好机会。
标签: c# unity3d unityscript unity5