zoukankan      html  css  js  c++  java
  • Unity Button绑定事件的方法

    一、可视化创建及事件绑定

    先写一段 Button 的响应代码:

     1 using UnityEngine;
     2 using UnityEngine.UI;
     3 
     4 public class ButtonTest : MonoBehaviour
     5 {
     6     public Text m_Text;
     7 
     8     public void OnButtonClickEvent()
     9     {
    10         m_Text.text = "按钮点击";
    11     }
    12 }

    点击 Button 组件上的 OnClick 的+号,将绑定脚本的对象赋值到这个 Button 组件上

    选择并绑定 Button 的点击事件

    Button 的点击效果:

    二、通过监听按钮绑定事件

    使用 Button 组件自带的 onClick.AddListener 方法:

     1 using UnityEngine;
     2 using UnityEngine.UI;
     3 
     4 public class ButtonTest : MonoBehaviour
     5 {
     6     public Button m_Button;
     7     public Text m_Text;
     8 
     9     void Start()
    10     {
    11         m_Button.onClick.AddListener(OnButtonClickEvent);
    12     }
    13 
    14     public void OnButtonClickEvent()
    15     {
    16         m_Text.text = "按钮点击";
    17     }
    18 }

    Button 的点击效果:

    三、通过射线监听点击的物体来绑定事件

     1 using System.Collections.Generic;
     2 using UnityEngine;
     3 using UnityEngine.EventSystems;
     4 using UnityEngine.UI;
     5 
     6 public class ButtonTest : MonoBehaviour
     7 {
     8     public Text m_Text;
     9 
    10     void Update()
    11     {
    12         if (Input.GetMouseButtonDown(0))
    13         {
    14             if (OnePointColliderObject() != null)
    15             {
    16                 if (OnePointColliderObject().name == "Button" || OnePointColliderObject().name == "Text")
    17                 {
    18                     ButtonOnClickEvent();
    19                 }
    20             }
    21         }
    22     }
    23 
    24     // 点击对象获取到对象的名字
    25     public GameObject OnePointColliderObject()
    26     {
    27         // 存有鼠标或者触摸数据的对象
    28         PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
    29         // 当前指针位置
    30         eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
    31         // 射线命中之后的反馈数据
    32         List<RaycastResult> results = new List<RaycastResult>();
    33         // 投射一条光线并返回所有碰撞
    34         EventSystem.current.RaycastAll(eventDataCurrentPosition, results);
    35         // 返回点击到的物体
    36         if (results.Count > 0)
    37             return results[0].gameObject;
    38         else
    39             return null;
    40     }
    41 
    42     public void ButtonOnClickEvent()
    43     {
    44         m_Text.text = "按钮点击";
    45     }
    46 }

    Button 的点击效果:

    四、通过EventTrigger实现点击事件

    在 Button 上添加 EventTrigger 组件

    编辑代码:

     1 using UnityEngine;
     2 using UnityEngine.EventSystems;
     3 using UnityEngine.UI;
     4 
     5 [RequireComponent(typeof(EventTrigger))]
     6 public class ButtonTest : MonoBehaviour
     7 {
     8     public Text m_Text;
     9 
    10     void Start()
    11     {
    12         Button btn = transform.GetComponent<Button>();
    13         EventTrigger trigger = btn.gameObject.GetComponent<EventTrigger>();
    14         EventTrigger.Entry entry = new EventTrigger.Entry
    15         {
    16             // 鼠标点击事件
    17             eventID = EventTriggerType.PointerClick,
    18 
    19             callback = new EventTrigger.TriggerEvent()
    20         };
    21         entry.callback.AddListener(ButtonOnClickEvent);
    22         trigger.triggers.Add(entry);
    23     }
    24 
    25     public void ButtonOnClickEvent(BaseEventData pointData)
    26     {
    27         m_Text.text = "按钮点击";
    28     }
    29 }

    Button 的点击效果:

    五、通过通用类UIEventListener处理响应事件

    通用类 UIEventListener 脚本:

     1 using UnityEngine;
     2 using UnityEngine.EventSystems;
     3 
     4 public class UIEventListener : MonoBehaviour, IPointerClickHandler
     5 {
     6     // 定义事件代理
     7     public delegate void UIEventProxy();
     8     // 鼠标点击事件
     9     public event UIEventProxy OnClick;
    10 
    11     public void OnPointerClick(PointerEventData eventData)
    12     {
    13         if (OnClick != null)
    14             OnClick();
    15     }
    16 }

    Button 脚本:

     1 using UnityEngine;
     2 using UnityEngine.EventSystems;
     3 using UnityEngine.UI;
     4 
     5 [RequireComponent(typeof(EventTrigger))]
     6 public class ButtonTest : MonoBehaviour
     7 {
     8     public Text m_Text;
     9 
    10     void Start()
    11     {
    12         Button btn = this.GetComponent<Button>();
    13         UIEventListener btnListener = btn.gameObject.AddComponent<UIEventListener>();
    14 
    15         btnListener.OnClick += delegate () {
    16             ButtonOnClickEvent();
    17         };
    18     }
    19 
    20     public void ButtonOnClickEvent()
    21     {
    22         m_Text.text = "按钮点击";
    23     }
    24 }

    Button 的点击效果:

    *** |  以上内容仅为学习参考、学习笔记使用  | ***

  • 相关阅读:
    Web应用指纹识别
    同步I/O 和 异步I/O
    怎样找出自己定义标签的java类
    Android多线程文件下载器
    cocos2d-x 3.0游戏实例学习笔记 《跑酷》 第三步---主角开跑&amp;同一时候带着刚体
    记C++课程设计--学生信息管理系统
    iOS开发--从TQRichTextViewDemo中学会分析project
    九度oj题目&amp;吉大考研10年机试题全解
    setOnFocusChangeListener的使用
    查看网络port占用
  • 原文地址:https://www.cnblogs.com/ChenZiRong1999/p/13328042.html
Copyright © 2011-2022 走看看