zoukankan      html  css  js  c++  java
  • unity UI事件

    由于工作需要到持续按键,所以了解了一下unity UI事件,本文主要转载于http://www.cnblogs.com/zou90512/p/3995932.html?utm_source=tuicool&utm_medium=referral,并对相关问题进行解释。

    我们最常用到的就是unity的button组件,其实button组件所响应的事件为unity众多ui事件中的PointerClick事件,unity的ui事件如下图所示:

    实现响应事件有以下三种:

    (一)在相关UI控件上挂脚本,脚本继承相关事件对应的接口,并在接口函数中完成相应方法的实现即可。

    (二)在相关控件上添加EventTrigger组件,点击AddNewEnvetType添加事件类型,即对应的UI事件,然后就可以挂载响应的方法。

    (三)便是在程序实现。第一步也需要在相关控件上添加EventTrigger组件,然后添加监听。代码如下

      void Start()
        {
            var trigger = transform.gameObject.GetComponent<EventTrigger>();
            if (trigger == null)
                trigger = transform.gameObject.AddComponent<EventTrigger>();
    
            // 实例化delegates
            trigger.triggers = new List<EventTrigger.Entry>();
    
            // 定义需要绑定的事件类型。并设置回调函数
            EventTrigger.Entry entry = new EventTrigger.Entry();
            // 设置 事件类型
            entry.eventID = EventTriggerType.PointerClick;
            // 设置回调函数
            entry.callback = new EventTrigger.TriggerEvent();
            UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnScriptControll);
            entry.callback.AddListener(callback);
            // 添加事件触发记录到GameObject的事件触发组件
            trigger.triggers.Add(entry);
        }

    在此理解一下此段代码:我们要添加一个我们想要的事件,就需要对EventTrigger添加内容,添加的内容有两个,一个为事件类型,一个为对应事件实现的函数,或者说方法。

    EventTrigger通过Entry类打包了这两个内容,eventID绑定事假类型,callback绑定事件对应的方法。通过unityaction定义相关委托以及绑定的方法,通过添加监听AddListener来实现。

    由于在众多图片或者text上实现点击事件是则需要每一个都添加点击事件,比较麻烦,借鉴别人的EventListener来

    using UnityEngine;
    using UnityEngine.EventSystems;
    using UnityEngine.Events;
    
    public class UGUIEventListener : EventTrigger
    {
        public UnityAction<GameObject> onClick;
        //可以重载EventTrigger的其他虚方法来实现点击拖动等事件
        public override void OnPointerClick(PointerEventData eventData)
        {
            base.OnPointerClick(eventData);
    
            if(onClick != null)
            {
                onClick(gameObject);
            }
        }
    
        public static UGUIEventListener Get(GameObject go)
        {
            UGUIEventListener listener = go.GetComponent<UGUIEventListener>();
    
            if (!listener)
                listener = go.AddComponent<UGUIEventListener>();
    
            return listener;
        }
    }

    给text和image添加事件

    using UnityEngine;
    using UnityEngine.UI;
    
    public class UGUIButtonClick : MonoBehaviour
    {
        public Text textTitle;
        public Image imageTitle;
    
        private void Awake()
        {
            UGUIEventListener.Get(textTitle.gameObject).onClick = OnClick;
            UGUIEventListener.Get(imageTitle.gameObject).onClick = OnClick;
        }
    
        void OnClick(GameObject go)
        {
            if(go == textTitle.gameObject)
            {
                Debug.Log("Text clicked");
            }
            else if(go == imageTitle.gameObject)
            {
                Debug.Log("Image clicked");
            }
        }
    }

    PS:三维物体实现上述点击事件需要在Main Camera上挂载physics raycaster组件,然后在三维物体上挂载EventTrigger就可以实现相关方法方法

  • 相关阅读:
    Silverlight & Blend动画设计系列三:缩放动画(ScaleTransform) from http://www.cnblogs.com/beniao/archive/2010/03/26/1694157.html
    基于知识库的信息推荐系统
    观察者模式之:一个游戏设想
    Expression Blend制作画卷效果 from http://www.cnblogs.com/alexis/archive/2010/12/23/1915402.html
    为了忘却的生活
    C 文件读写
    VC++中,CString,in,char,等数据类型的相互转化 from:http://blog.csdn.net/heaven13483/article/details/7553176
    【ML2】最小二乘法(least squares)介绍
    机器学习的基本概念
    【ML95】SVM的sklearn.svm.SVC()函数应用
  • 原文地址:https://www.cnblogs.com/llstart-new0201/p/7102868.html
Copyright © 2011-2022 走看看