u3d学习笔记二:unity事件机制的实现

原创 2018年04月17日 15:43:57

事件机制广泛的存在于MVC架构中,事件机制的灵活性使我们的开发更为方便,下面对unity中事件机制的实现就个人的理解做一个简单的讲解:

一、直接绑定
  1. 直接创建button控件
  2. 创建testClick脚本,在里面创建一个OnClickHandler()的共有函数,并将脚本绑定在button控件中
  3. 点击按钮控件,找到下图所示的位置,点击加号,将按钮控件放入,然后设置相应函数,结果如下图所示
  4. 运行,onClickHandler函数就会相应点击操作(可以在函数中加上Debug.log(“”)来测试)
二、通过实现事件类接口来实现事件的监听
  1. 先创建一个按钮
  2. 创建脚本testClick,脚本实现IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IDragHandler等接口,并绑定到按钮上
  3. 运行,相应接口就能响应相应的操作(可以在函数中加上Debug.log(“”)来测试)
三、通过eventTrigger实现按钮事件的
  1. 创建一个按钮
  2. 点击按钮,在按钮上加一个EventTrigger,通过AddComponent->Event->EventTrigger添加,添加后如下图所示
  3. 创建脚本testClick,代码如下:
  4. 运行就可以响应相应的点击事件
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class ClickTest : MonoBehaviour
{

    private bool isCanMove = false;
    // 仅在首次调用 Update 方法之前调用 Start
    private void Start()
    {
        EventTrigger trigger = transform.gameObject.GetComponent<EventTrigger>();
        if (trigger == null)
        {
            trigger = transform.gameObject.AddComponent<EventTrigger>();
        }

        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>(OnClickHandler);
        entry.callback.AddListener(callback);
        trigger.triggers.Add(entry);
    }


    public void OnClickHandler(BaseEventData eventData)
    {
        isCanMove = !isCanMove;
        Debug.Log("this is a test!");
    }
}
四、通过控件绑定增加监听的形式
  1. 同样是先创建一个按钮,并命名为你想要的名字,在下图位置修改命名
  2. 创建脚本testClick,并将脚本绑定在任意组件中,这个绑定不需要绑定到button上。
  3. 在脚本中获取按钮控件,并增加相应的时间监听,代码如下所示
  4. 运行就可以响应相应的点击事件
using UnityEngine;
using UnityEngine.UI;

public class ClickTest : MonoBehaviour
{
    public GameObject sphere;

    public Button startBtn;

    private bool isCanMove = false;
    // 仅在首次调用 Update 方法之前调用 Start
    private void Start()
    {
        GameObject btn = GameObject.Find("startBtn");
        startBtn = btn.GetComponent<Button>();
        startBtn.onClick.AddListener(delegate ()
        {
            this.OnClickHandler();
        });
    }

    // 如果 MonoBehaviour 已启用,则在每一帧都调用 Update
    private void Update()
    {
        if (isCanMove)
        {
            sphere.transform.Translate(Vector3.right *Time.deltaTime*1);
            sphere.transform.Translate(Vector3.up * Time.deltaTime* 1);
        }
    }


    private void OnClickHandler()
    {
        isCanMove = !isCanMove;
        Debug.Log("this is a test!");
    }
}
总结

个人觉得最为方便和灵活的方法就是第四种,因为这种方法叫适合我之前的打码习惯吧,通过增加事件监听器来实现时间监听。
以上的都是自己使用的一些总结,如有不对或者错漏的地方,希望大大们不吝赐教,谢谢啦

Andrew的U3D课程

-
  • 1970年01月01日 08:00

Unity3D事件派发机制之Delegate

上一章:【基于MONO事件派发机制之SendMessage】 废话不多说,直接上代码。 [mw_shl_code=csharp,true]/* * NotificationDelegCenter ...
  • dashuaifenyun1991
  • dashuaifenyun1991
  • 2015-01-27 19:23:54
  • 1916

unity3d二连跳的问题

在实现角色二连跳的时候发现第二次AddForce的时候有时候起跳速度会变慢甚至会跳不起来是因为这时候rigidbody2D.velocity还有下落的速度导致。解决办法就是第二次AddForce之前将...
  • egostudio
  • egostudio
  • 2015-01-25 22:09:32
  • 1052

【Unity3D】基础知识学习笔记

Unity3D基础知识学习笔记 1、基础知识: 标题栏 菜单栏 工具栏:变换工具、gizmos切换、播放控件、层列表、布局列表 功能窗口 2、资源及资源类型:在project里面能够create的资...
  • woaini454186694
  • woaini454186694
  • 2016-05-25 22:53:54
  • 5729

Unity3D 学习笔记3——了解U3D引擎的操作面板和各种工具

Unity3D 学习笔记3——了解U3D引擎的操作面板和各种工具在完成了Unity的安装破解之后,我们接下来要做的当前是启动这个引擎,然后学会如何去使用它为我们提供的各种工具,这也是上手任何一个软件的...
  • linshuhe1
  • linshuhe1
  • 2015-10-26 10:40:27
  • 2842

生成和识别二维码U3d

工作繁忙,很久没有更新,略表歉意。关于二维码的生成和识别网上泛泛看了一些,ZXing用的比较多。 ZXing的官网是http://zxingnet.codeplex.com/,它在github有源码,...
  • sgnyyy
  • sgnyyy
  • 2016-02-24 10:22:58
  • 3569

unity3D学习笔记之二:Stats面板

Unity 5 Stats窗口 Unity5的 Statistics上的统计信息和Unity4 有一些区别, Statistics窗口,全称叫做 Rendering Statistics Win...
  • yhhwatl
  • yhhwatl
  • 2017-05-26 11:44:03
  • 381

Unity Shader数学笔记

1、透视矩阵推导过程 其中 zz 在光栅化过程中不按线性插值,而是按 1/z1/z 做线性插值,证明如下: 如图为 x−zx-z 平面上一条与三角形的某一扫描线对应的线段,设直线方程为 ax+...
  • NotMz
  • NotMz
  • 2017-06-24 17:26:53
  • 232

自己用的unity学习笔记(二)——unity进阶

协同程序(协同或者协程) 线程、进程 一个应用程序就是一个进程,笼统的说就是一个.exe程序 一个进程中至少一个线程叫主线程。 一个或多个线程组合成了进程。 协程 在unity中为了在主线...
  • hanxiaoyuan32
  • hanxiaoyuan32
  • 2017-12-21 18:32:13
  • 271

Unity2017 实现ARPG游戏 2

下面我们开始使用这个方法,首先创建一个scene改名start并保存,在复制他改名为chooseRole(选择角色)。要scene的话我们需要把scene在builid setting里添加;点击菜单...
  • qq_23329497
  • qq_23329497
  • 2018-01-14 18:18:52
  • 128
收藏助手
不良信息举报
您举报文章:u3d学习笔记二:unity事件机制的实现
举报原因:
原因补充:

(最多只允许输入30个字)