关于unity3d scrollview动态添加和删除对象的相关资料我在网上查了一下。觉得作者写的这篇还不错,在这分享给大家。
动态添加,基本思想是:1、先把要添加的元素在编辑器中编辑好,制作成一个prefab。
2、在代码中,动态的生成一个新的对象加入到Grid对象的子对象中。这里利用到了Resources对象,这个对象的用法可以参照官网,就是在Assets目录下有一个Resources目录,位置随便,只要是在Assets目录下就行。
3、加入对象之后,可以从这些对象中获取子对象进行属性的修改,比如添加了十个武器,那么十个武器的Icon,名字和价格都不一样。
下面代码代码中:代码如下:
- var GameObject ngui_grid = GameObject.Find ("UIGrid");
- UIGrid ngui_ui_grid = ngui_grid.GetComponent<UIGrid>();
- GameObject _gridItem = NGUITools.AddChild(ngui_grid, (GameObject)(Resources.Load("GridItemPrefab")));
- // 生成的对象重新命名
- _gridItem.name = "gridItem" + indexSlot;
- var item = itemManage.Items[itemslot.Index];
- // 动态改变每一个武器对象的显示属性。
- Transform[] allChildren = _gridItem.GetComponentsInChildren<Transform>();
- foreach (Transform child in allChildren)
- {
- if(child.gameObject.tag == "GridItemIcon")
- {
- UISprite _ItemIcon = child.gameObject.GetComponent<UISprite>();
- _ItemIcon.spriteName = item.Icon.name;
- }
- else if(child.gameObject.tag == "GridItemName")
- {
- UILabel _ItemName = child.gameObject.GetComponent<UILabel>();
- _ItemName.text = item.Name+" "+itemslot.Index;
- }
- else if(child.gameObject.tag == "GridItemPrice")
- {
- UILabel _ItemPrice = child.gameObject.GetComponent<UILabel>();
- _ItemPrice.text = item.Price+"$";
- }
- else
- {
- // do nothing,,,
- }
- }
- // 加入这个标志,可以让元素添加之后,Grid对元素进行重新排列,
- ngui_ui_grid.repositionNow = true;
- return;
- for(int k = 0;k<ngui_grid.transform.childCount;k++)
- {
- GameObject go = ngui_grid.transform.GetChild(k).gameObject;
- Destroy(go);
- // 这个标记会让元素立即重新排列。
- ngui_ui_grid.Reposition();
- }