unity3d scrollview动态添加和删除对象

2015年02月02日 09:54 0 点赞 0 评论 更新于 2025-11-21 15:58

在网上查找关于 Unity3D ScrollView 动态添加和删除对象的相关资料时,发现有一篇文章写得不错,在此分享给大家。

动态添加对象

基本思路

  1. 预制体制作:先在编辑器中编辑好要添加的元素,将其制作成一个预制体(Prefab)。预制体是 Unity 中非常重要的概念,它可以方便我们重复使用相同的对象,并且在需要修改时可以统一调整。
  2. 动态生成对象并添加:在代码中,动态生成一个新的对象并将其加入到 Grid 对象的子对象中。这里会用到 Resources 对象,其使用方法可参照 Unity 官网文档。具体来说,需要在 Assets 目录下创建一个 Resources 目录,该目录的位置可以随意,只要处于 Assets 目录下即可。
  3. 修改子对象属性:对象添加完成后,可以从这些对象中获取子对象并修改其属性。例如,当添加了十个不同的武器对象时,每个武器的图标(Icon)、名称(Name)和价格(Price)都可以设置为不同的值。

代码实现

// 查找 UIGrid 对象
var ngui_grid = GameObject.Find("UIGrid");
// 获取 UIGrid 组件
UIGrid ngui_ui_grid = ngui_grid.GetComponent<UIGrid>();
// 从 Resources 目录加载预制体并实例化,添加到 UIGrid 下
GameObject _gridItem = NGUITools.AddChild(ngui_grid, (GameObject)(Resources.Load("GridItemPrefab")));
// 为生成的对象重新命名
_gridItem.name = "gridItem" + indexSlot;
// 获取物品信息
var item = itemManage.Items[itemslot.Index];
// 获取子对象的所有 Transform 组件
Transform[] allChildren = _gridItem.GetComponentsInChildren<Transform>();
// 遍历子对象
foreach (Transform child in allChildren)
{
if (child.gameObject.tag == "GridItemIcon")
{
// 获取 UISprite 组件
UISprite _ItemIcon = child.gameObject.GetComponent<UISprite>();
// 设置图标名称
_ItemIcon.spriteName = item.Icon.name;
}
else if (child.gameObject.tag == "GridItemName")
{
// 获取 UILabel 组件
UILabel _ItemName = child.gameObject.GetComponent<UILabel>();
// 设置物品名称
_ItemName.text = item.Name + " " + itemslot.Index;
}
else if (child.gameObject.tag == "GridItemPrice")
{
// 获取 UILabel 组件
UILabel _ItemPrice = child.gameObject.GetComponent<UILabel>();
// 设置物品价格
_ItemPrice.text = item.Price + "$";
}
else
{
// 其他情况不做处理
}
}
// 加入这个标志,可以让元素添加之后,Grid 对元素进行重新排列
ngui_ui_grid.repositionNow = true;
return;

元素删除

基本思路

通过遍历 Grid 对象的所有子对象,逐个销毁这些子对象,并在销毁后调用 Reposition 方法让 Grid 立即重新排列元素。

代码实现

for (int k = 0; k < ngui_grid.transform.childCount; k++)
{
// 获取子对象
GameObject go = ngui_grid.transform.GetChild(k).gameObject;
// 销毁子对象
Destroy(go);
// 这个标记会让元素立即重新排列
ngui_ui_grid.Reposition();
}

以上代码实现了在 Unity3D 中 ScrollView 动态添加和删除对象的功能,希望对大家有所帮助。在实际使用时,可以根据具体需求对代码进行调整和优化。

作者信息

feifeila

feifeila

共发布了 3994 篇文章