Unity3D NGUI动态创建按钮

来源:互联网 发布:mac word 登录 编辑:程序博客网 时间:2024/05/21 11:35

原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【119706192 本文链接地址: Unity3D NGUI动态创建按钮


以动态创建服务器列表为例。

public UIAtlas mAtlas;    public UIFont mFont;    public string mSriteName;    public GameObject Playerlist;    /// <summary>    /// 动态加载一个NGUI按钮    /// </summary>    /// <param name="name"></param>    private void CreateServerButton(string key,string name, int index)    {        //获得深度(要创建button的Panle的深度)        int depth = NGUITools.CalculateNextDepth(PanleMe);        //创建button物体,命名、设tag、摆所在panle的相对位置。        GameObject go = NGUITools.AddChild(PanleMe);        go.name = name;        go.tag = "trendsButton";        go.transform.localPosition = new Vector3(-180 + (index % 3) * 180, 140, 0);        //添加button的背景图片UISprite        UISprite bg = NGUITools.AddWidget<UISprite>(go);        bg.type = UISprite.Type.Sliced;        bg.name = "Background";        bg.depth = depth;        //背景图片使用的图集        bg.atlas = mAtlas;        //图集中使用的精灵名字        bg.spriteName = mSriteName;        bg.transform.localScale = new Vector3(150f, 40f, 1f);        //跳转位置(必要)        bg.MakePixelPerfect();        //如果有字体,添加UILabel        if (mFont != null)        {            UILabel lbl = NGUITools.AddWidget<UILabel>(go);            lbl.font = mFont;            lbl.text = name;            lbl.transform.localScale = new Vector3(22f, 22f, 1f);            lbl.transform.localPosition = new Vector3(0, 0, -1f);            lbl.color = Color.black;            lbl.MakePixelPerfect();        }                //添加碰撞(有碰撞才能接收鼠标/触摸),大小与Button背景一致        BoxCollider box = NGUITools.AddWidgetCollider(go);        box.center = new Vector3(0,0,-1);        box.size = new Vector3(bg.transform.localScale.x, bg.transform.localScale.y, 0);        //添加UIButton触发事件的必要组件,并关联之前生成的UISprite        go.AddComponent<UIButton>().tweenTarget = bg.gameObject;        //添加动态效果组件(大小、位移、音效)。(可选)        go.AddComponent<UIButtonScale>();        go.AddComponent<UIButtonOffset>();        go.AddComponent<UIButtonSound>();        /*------ 一下是自己要用到的UIButton功能,可以绑自己需要的组件 ------*/        //添加一个开启Player list Panel 的按钮事件        UIButtonTween serverListPanel = go.AddComponent<UIButtonTween>();        serverListPanel.tweenTarget = PanleNext;        serverListPanel.playDirection = AnimationOrTween.Direction.Forward;        serverListPanel.ifDisabledOnPlay = AnimationOrTween.EnableCondition.EnableThenPlay;        //隐藏自己panel        UIButtonTween hidemePanel = go.AddComponent<UIButtonTween>();        hidemePanel.tweenTarget = PanleMe;        hidemePanel.playDirection = AnimationOrTween.Direction.Reverse;        hidemePanel.disableWhenFinished = AnimationOrTween.DisableCondition.DisableAfterReverse;        //添加点击事件,参数是服务器ID(点击获取本服务器ID的下所有角色)        UIButtonMessage ubm = go.AddComponent<UIButtonMessage>();        ubm.target = Playerlist;        //给UIButtonMessage子增加传递‘参数’功能。        ubm.functionName = "Playerlist";        ubm.parameterStr = key;    }    /// <summary>    /// 清空动态生成的按钮    /// </summary>    void cleantrendsButton()    {        GameObject[] tbs = GameObject.FindGameObjectsWithTag("trendsButton");        for (int i = 0; i < tbs.Length; i++)        {            Destroy(tbs[i].gameObject);        }    }


更多0

0 0
原创粉丝点击