您的位置:首页 > 移动开发 > Unity3D

Unity3D 动态实例化Prefab

2014-01-15 17:31 441 查看
原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【Unity3D(AR/VR) 334163814】【Unity3D(游戏) 119706192】 本文链接地址: 动态实例化Prefab

之前写过一篇“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的按钮。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Prefab 动态创建