zoukankan      html  css  js  c++  java
  • NGUI基础之button(按钮)

    1,button的创建;2,button组件的基本属性;3,button的事件监听

    原位地址:http://blog.csdn.net/dingkun520wy/article/details/50434520


    1,button的创建

    编辑器创建

    代码创建

    /// <summary>
        /// 动态加载一个NGUI按钮
        /// </summary>
        /// <param name="panleMe">父节点对象</param>
        /// <param name="atlas">用到的图集</param>
        /// <param name="sriteName">图片的名字</param>
        private void CreateServerButton(GameObject panleMe, UIAtlas atlas, string sriteName)
        {
            //获得深度(要创建button的Panle的深度)
            int depth = NGUITools.CalculateNextDepth(panleMe);
            //创建button物体,命名、设tag、摆所在panle的相对位置。
            GameObject go = NGUITools.AddChild(panleMe);
            //添加button的背景图片UISprite
            UISprite bg = NGUITools.AddWidget<UISprite>(go);
            bg.type = UISprite.Type.Sliced;
            bg.depth = depth;
            //背景图片使用的图集
            bg.atlas = atlas;
            //图集中使用的精灵名字
            bg.spriteName = sriteName;
            //跳转位置(必要)
            bg.MakePixelPerfect();
            
            //添加碰撞(有碰撞才能接收鼠标/触摸),大小与Button背景一致
            BoxCollider box = NGUITools.AddWidgetCollider(go);
            box.center = new Vector3(0, 0, -1);
            box.size = new Vector3(bg.localSize.x, bg.localSize.y, 0);
    
            //添加UIButton触发事件的必要组件,并关联之前生成的UISprite
            UIButton bt = go.AddComponent<UIButton>();
            bt.tweenTarget = bg.gameObject;
    
        }


    2,button组件的基本属性

    按钮用到的UISprite

    按钮的响应范围

    UIButton的属性


    3,button的事件监听

    直接监听事件

    把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不灵活。

    void OnClick()
    {
     Debug.Log("Button is Click!!!");
    }

    使用SendMessage

    选择按钮后,在Unity导航菜单栏中选择Component->Interaction->Button Message 组件。

    Target:接收按钮消息的游戏对象。

    Function Name:接收按钮消息的方法,拥有这个方法的脚本必须绑定在上面Target对象身上。

    Trigger:触发的事件,OnClick显然是一次点击。

    Include Children :是否让该对象的所有子对象也发送这个点击事件。


    使用UIListener

    这个也是推荐大家使用的一种方法,选择按钮后在Unity导航菜单栏中选择Component->NGUI->Internal ->Event Listener 。 挂在按钮上就可以,它没有任何参数。。

    在任何一个脚本或者类中即可得到按钮的点击事件、把如下代码放在任意类中或者脚本中。

    void Awake()
    {
                    //获取需要监听的按钮对象
    GameObject button= GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/LoadUI/MainCommon/Button");
                    //设置这个按钮的监听,指向本类的ButtonClick方法中。
    UIEventListener.Get(button).onClick= ButtonClick;
    }
     
            //计算按钮的点击事件
    void ButtonClick(GameObjectbutton)
    {
    Debug.Log("GameObject "+ button.name);
     
    }

    更多操作类型

    publicclass UIEventListener: MonoBehaviour
    {
    publicdelegate voidVoidDelegate (GameObjectgo);
    publicdelegate voidBoolDelegate (GameObjectgo,bool state);
    publicdelegate voidFloatDelegate (GameObject go,float delta);
    publicdelegate voidVectorDelegate (GameObject go,Vector2 delta);
    publicdelegate voidStringDelegate (GameObject go,string text);
    publicdelegate voidObjectDelegate (GameObject go,GameObject draggedObject);
    publicdelegate voidKeyCodeDelegate (GameObject go,KeyCode key);
     
    publicobject parameter;
     
    publicVoidDelegate onSubmit;
    publicVoidDelegate onClick;
    publicVoidDelegate onDoubleClick;
    publicBoolDelegate onHover;
    publicBoolDelegate onPress;
    publicBoolDelegate onSelect;
    publicFloatDelegate onScroll;
    publicVectorDelegate onDrag;
    publicObjectDelegate onDrop;
    publicStringDelegate onInput;
    publicKeyCodeDelegate onKey;
     
    voidOnSubmit (){ if(onSubmit!= null)onSubmit(gameObject);}
    voidOnClick (){ if(onClick!= null)onClick(gameObject);}
    voidOnDoubleClick (){ if(onDoubleClick!= null)onDoubleClick(gameObject);}
    voidOnHover (boolisOver){ if(onHover!= null)onHover(gameObject,isOver);}
    voidOnPress (boolisPressed){ if(onPress!= null)onPress(gameObject,isPressed);}
    voidOnSelect (boolselected){ if(onSelect!= null)onSelect(gameObject,selected);}
    voidOnScroll (floatdelta){ if(onScroll!= null)onScroll(gameObject,delta);}
    voidOnDrag (Vector2delta){ if(onDrag!= null)onDrag(gameObject,delta);}
    voidOnDrop (GameObjectgo){ if(onDrop!= null)onDrop(gameObject,go);}
    voidOnInput (stringtext){ if(onInput!= null)onInput(gameObject,text);}
    voidOnKey (KeyCodekey){ if(onKey!= null)onKey(gameObject,key);}
     
    /// <summary>
    /// Get or add an event listener to the specified game object.
    /// </summary>
     
    staticpublic UIEventListenerGet (GameObjectgo)
    {
    UIEventListenerlistener =go.GetComponent<UIEventListener>();
    if(listener== null)listener =go.AddComponent<UIEventListener>();
    returnlistener;
    }
    }



  • 相关阅读:
    itext操作PDF文件添加水印
    【PDF单页转化为图片输出 注意:英文或图片类的PDF可转化,中文抛异常】
    【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】
    Itext简绍及操作PDF文件
    【将txt文本转图片】
    通用缓存组件
    一个简易的、轻量级的方法并行执行线程辅助类
    学习笔记 android fragment
    某队列积压问题分析、解决
    平衡
  • 原文地址:https://www.cnblogs.com/lexiaoyao-jun/p/5208224.html
Copyright © 2011-2022 走看看