139
社区成员
发帖
与我相关
我的任务
分享
Unity3D动态生成按钮。
在游戏开发过程中进行技能栏按钮制作时,由于技能数量和数据都不确定,需要从Manager获取数据之后才能进行生成。这样的情况显然不能讲整个技能栏做成固定预制体进行显示和隐藏,因此需要涉及到按钮的动态生成,在获取到数据的时候对设计好的按钮预制体进行初始化和生成。
public void Init()
{
//获取数据列表
turretList = BuildingManager.Instance.turretList;
for (int i = 0; i < turretList.Count; i++)
{
int index = i;
//初始化预制体
TwrX = Instantiate(ResMgr.Instance.Load<GameObject>("Prefabs/UI/tower_step"));
TwrX.name = $"tower_Step_{i}";
//初始化点击事件
BtnX = TwrX.GetComponentInChildren<Button>();
BtnX.onClick.AddListener(() => {
if (isActive)// && System.Convert.ToInt32(CountX.text)>0
{
turretIsClicked = turretList[index];
BuildingManager.Instance.build(index);
}
});
//以下填充按钮属性
//······
}
//将面板设置为按钮的父物体
TwrX.transform.SetParent(Step_Panel.transform);
}
每次Init技能栏之前先对技能栏下子物体(即动态生成的技能按钮)进行检索删除,避免数据修改或重复显示。
了解Unity3D底层逻辑,可以帮助解决大部分遇到的问题。