Unity3D 动态实例化Prefab
2014-01-15 17:31
441 查看
原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【Unity3D(AR/VR) 334163814】【Unity3D(游戏) 119706192】 本文链接地址: 动态实例化Prefab
之前写过一篇“Unity3D NGUI动态创建按钮”不少人按照我文章中介绍的方法来动态创建按钮,文章那种做法并不好。现在写一遍新的文章来教大家用Prefab的方式来动态创建NGUI按钮(也可以是任何GameObject)。
我添加了一个测试代码,当点击按钮的时候把按钮文字替换为buttonID。
将做好的Prefab绑定到ButtonPre属性。
之后隐藏掉场景内手动设置的那个原始物体。
之前写过一篇“Unity3D NGUI动态创建按钮”不少人按照我文章中介绍的方法来动态创建按钮,文章那种做法并不好。现在写一遍新的文章来教大家用Prefab的方式来动态创建NGUI按钮(也可以是任何GameObject)。
1.首先要预制好我们要创建的物体:
a.首先创建一个游戏物体。
b.自定义样式并添加自己需要的脚本。
我添加了一个测试代码,当点击按钮的时候把按钮文字替换为buttonID。
using UnityEngine; using System.Collections; public class TestButton : MonoBehaviour { public int ButtonID = 0; //点击把按钮问题替换为ButtonID void OnClick() { UILabel buttonLable = GetComponentInChildren<UILabel>(); buttonLable.text = ButtonID.ToString(); } }
c.讲制作好的物体创建为Prefab。
2.动态创建脚本。
a.脚本。
using UnityEngine; using System.Collections; using System.Collections.Generic; public class TestCreat : MonoBehaviour { public GameObject ButtonPre; public int CreatCount = 3; public float PosY = 0; public float Padding = 40; //存储所有动态添加的按钮 [HideInInspector] public List<TestButton> Buttons = new List<TestButton>(); void Start() { CreatButton(); } void Update() { //按下空格键,删除id为1的按钮 if (Input.GetKeyDown(KeyCode.Space)) { //不能在foreach里面直接删除元素,所以把要删除的元素先记录下来,foreach结束后再删除。 TestButton deleteTB = null; foreach (TestButton item in Buttons) { if (item.ButtonID == 1) { deleteTB = item; break; } } if (deleteTB != null) Destroy(deleteTB.gameObject); } } void CreatButton() { Buttons.Clear(); for (int i = 0; i < CreatCount; i++) { Buttons.Add(AddButton()); } } TestButton AddButton() { GameObject go = NGUITools.AddChild(this.gameObject, ButtonPre); go.name = "动态" + Buttons.Count; go.transform.localPosition = new Vector3(go.transform.localPosition.x, PosY + Padding * Buttons.Count, go.transform.localPosition.z); TestButton tb = go.GetComponent<TestButton>(); tb.ButtonID = Buttons.Count; return tb; } }
b.赋值。
将TestCreat脚本绑定在要创建动态物体的父级。将做好的Prefab绑定到ButtonPre属性。
之后隐藏掉场景内手动设置的那个原始物体。
3.结果测试。
a.开始运行,创建了CreatCount个按钮,分别取名,Y轴由PosY开始,每个按钮间距Padding。
b.点击按钮,按钮Label改变为ButtonID。
c.按下空格键删除ButtonID为1的按钮。
相关文章推荐
- jquery 动态创建元素的方式介绍及应用
- 基于jquery的关于动态创建DOM元素的问题
- 动态创建的表格单元格中的事件实现代码
- 用正则表达式 动态创建/增加css style script 兼容IE firefox
- javascript 动态创建 Option选项
- sqlserver 动态创建临时表的语句分享
- JavaScript 动态创建VML的方法
- 解决动态代码创建控件,每次到对应类都会创建控件的问题
- 动态创建多维数组——才不简单
- Unity3D学习笔记03:预设Prefab的使用
- spring动态创建切换多数据源问题分析与解决办法
- 动态创建ClientDataSet的表定义
- C++ 类工厂实现动态对象创建
- 改变 自绘 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景及其动态创建中的问题
- WTL动态创建STATIC静态位图控件
- Unity中使用UGUI制作Prefab后,调用Instantiate动态生成Button无法点击的解决方法
- 用字符串动态创建类并赋值
- 京城游戏人-Day4:Prefab 预制件用法(1)
- [Unity-21] Prefab详解
- Unity多个场景叠加或大场景处理方法小结