zoukankan      html  css  js  c++  java
  • 关于Unity中NGUI的Checkbox复选框、Slider滑动条和Button的6种触发回调事件的方式

    Checkbox复选框

    1.创建一个NGUI背景Sprite1节点

    2.打开NGUI---->Open---->Prefab Toolbar---->选择一个复选框节点,拖拽到背景节点Sprite1下,删除每个复选框节点下的NGUI Snapshot Point 20子节点,调整位置

    3.可以更改每个复选框节点下的Label子节点里面的文字

    4.这时候两个复选框可以同时被选中,如果想要做只能选中其中一个,就要设置复选框节点下的UI Toggle组件下的Group值,两个节点的Group值设置为一样就是同一组,就只能一个被选中

    Slider滑动条

    1.创建一个NGUI背景Sprite1节点

    2.打开NGUI---->Open---->Prefab Toolbar---->选择一个Slider滑动条节点,拖拽到背景节点Sprite1下,调整位置

    3.UI Slider组件

     Value:进度条的值

     Foreground:前景图片

     Background:背景图片

     :值改变的时候会用这个函数改变Label的值

    4.如果改变一下颜色和Label的位置,就可以做一个血条的效果,只要用代码来改变Slider组件的Value值就可以了

    Button添加事件的6种方法

    1.创建一个Sprite类型的Spritebutton节点在背景Sprite1下作为按钮子节点,可以给Spritebutton一个贴图和文字

    2.给Spritebutton节点添加按钮组件,NGUI---->Attach---->Collider和Button Script组件

    3.创建一个脚本mybuttonCallBack,打开mybuttonCallBack.cs

    方法1:直接监听事件 ----- 不推荐使用

    把下面代码直接写在mybuttonCallBack里,然后拖mybuttonCallBack脚本到有UI Button组件的节点上,就绑定在按钮节点上了,当按钮点击时就可以监听到,这种方法不太好很不灵活。

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

    方法2:onClick 列表 ------ 推荐使用

    把下面代码直接写在mybuttonCallBack里,然后拖mybuttonCallBack脚本到有UI Button组件的节点上,就绑定在按钮节点上了,当按钮点击时就可以监听到,

    void Start () 
    {
      //获得UIButton组件里面的onClick事件代理列表,public List<EventDelegate> onClick = new List<EventDelegate>(),给这个列表里面添加一个新的事件
      this.GetComponent<UIButton>().onClick.Add(new EventDelegate(this.OnClickButton2));    
    }
    
    void OnClickButton2 ()
    {
      Debug.Log("OnClickButton2");
    }

     另一种写法,这种可以写在任意类中或者脚本中

    void Start()
    {
        GameObject jump_button = GameObject.Find("game_root/cameras/UI Root/jump");
        jump_button.GetComponent<UIButton>().onClick.Add(new EventDelegate(this.Jump));
    }
    public void Jump()
    {
    } 
            

    方法3:使用SendMessage:早期的方法,不推荐使用,用多了之后消息满天飞,性能低,对于后期维护和代码调试非常不好, 尤其是几万行代码之后,现在游戏一般都是5万行或者一二十万行的代码------- 不推荐使用

    选择按钮Spritebutton后,在Unity导航菜单栏中选择Component->Interaction->Button Message 组件。
    Target:接收按钮消息的游戏对象。是按钮节点Spritebutton。
    Function Name:接收按钮消息的方法,拥有这个方法的脚本mybuttonCallBack必须绑定在上面Target对象Spritebutton身上。
    Trigger:触发事件的方式,OnClick显然是一次点击,还有OnMouseovor鼠标经过等等。
    Include Children :是否让该对象的所有子对象也发送这个点击事件。

    方法4:UIEventListener --------推荐使用
    选择按钮后在Unity导航菜单栏中选择Component->NGUI->Internal ->Event Listener 。 如果不添加也可以,运行的时候会帮我们自动添加一个,所以手动添加会更快,避免了添加组件的代码的执行。
    挂在按钮上就可以,它没有任何参数。
    在任何一个脚本或者类中即可得到按钮的点击事件、把如下代码放在任意类中或者脚本中。

    //或者写在void Start () 
    void Awake () 
    {    
      //获取需要监听的按钮对象
      GameObject button = GameObject.Find("UI Root/Camera/Anchor/Panel/LoadUI/MainCommon/Button");
      //设置这个按钮的监听,指向本类的ButtonClick方法中。如果这个脚本是挂在按钮上的,就不用上一句,button用this.gameobject代替
      UIEventListener.Get(button).onClick = ButtonClick4;
    }
    
    //计算按钮的点击事件
    void ButtonClick4(GameObject button)
    {
      Debug.Log("ButtonClick4");
    }

    方法5:EventDelegate --------推荐使用

    和第2种方法类似,把下面代码直接写在mybuttonCallBack里,然后拖mybuttonCallBack脚本到有UI Button组件的节点上,就绑定在按钮节点上了,当按钮点击时就可以监听到,

    void Start () 
    { 
      // 给Button按钮添加监听事件 
      EventDelegate.Add (GetComponent<UIButton> ().onClick, AddOnClick5); 
    }
    
    
    public void AddOnClick5 () 
    { 
      Debug.Log ("AddOnClick5"); 
    } 
    
    // 取消NGUI按钮的监听事件 
    public void CancelOnClick () 
    { 
      EventDelegate.Remove (GetComponent<UIButton> ().onClick, AddOnClick5); 
    } 

    方法6:UIEventTrigger --------推荐使用

    选择按钮节点,添加一个UI EventTrigger组件,里面可以设置各种各样的触发事件的方式以及可以设置绑定事件的节点和设置要触发的节点里面所挂载脚本的public方法。

  • 相关阅读:
    [EffectiveC++]item22:Declare data members private
    垃圾人定律
    [EffectiveC++]item17:以独立语句将newed对象置入智能指针
    [EffectiveC++]item15:Provide access to raw resources in resource-managing class
    C++ 中operator用法:隐式类型转换
    [EffectiveC++]item13:Use objects to manage resources(RAII)
    为什么拷贝构造函数的参数必须是引用?
    SPF邮件服务器
    raspberry
    bash
  • 原文地址:https://www.cnblogs.com/HangZhe/p/7429058.html
Copyright © 2011-2022 走看看