Unity3D 动态实例化Prefab

原创文章如需转载请注明:转载自 脱莫柔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的按钮。




评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值