zoukankan      html  css  js  c++  java
  • U3D事件系统总结

    事件系统有三个要素:发送者,接收者, 转发者。

    发送者有两种,一是相机,二是画布。发送者是事件的管理者,发起者,它们使用射线发射器来检测点击事件:

    • 相机的physics Raycaster。
    • 画面的Canvas Raycaster。

    发送者是首要因素,如果不给相机添加physics Raycaster组件,场景中的任何3D物体都不会有射线检测的计算,拣选事件永远不会触发。

    画面默认都带有Canvas Raycaster,因此不需要自己添加。只要UI自己处理好接收事件就可以接收消息了。

    转发者是指触发器EventTriger,是接收到事件后对事件的转发。如Button的属性面板上的On Click()就是一个触发器。

    接收者和触发者可以是UI或3D物体。只要实现了 IPointerDownHandler, IPointerUpHandler, IPointerClickHandler

     等接口就能接收到相关消息。以Button为例,实现UI的事件编写有三种方式:

    • 给Button添加一个脚本,实现IPointerClickHandler的OnPointerClick()接口,就能接收到按钮的点击事件。
    • 给按钮添加一个脚本,在脚本中GetComponent<Button>.onClick.AddListener(MyOnClick),点击按钮就会调用MyOnClick()的自定义方法。
    • 给按钮添加一个脚本bltListener,里面定义一个函数void OnMyClick(),同时在On Click()区域添加一个触发项:object选Button本身,后面选bltListener.OnMyClick。这是按钮自己向自己发送事件。当点击按钮时,按钮将遍历所有添加的触发项,并调用触发项指定的脚本。

    这三种方式本质上还是第一种方式。后面二种是UGUI实现的包装,便于使用和UI操作。

    对于3D物体,只有使用第一种方式了,是最原始的通用方式。

  • 相关阅读:
    欧拉回路的判断(hdu1878)其一
    最长公共子序列(不是子串)hdu1159
    线段树(hdu1166)
    记忆化搜索(hdu1078)
    分考场问题。。。
    hdu2087
    cf540C
    x86 寄存器 | DPL,RPL,CPL 之间的联系和区别
    深度学习 | 训练网络trick——mixup
    python | Argparse中action的可选参数store_true,store_false到底是什么意思?
  • 原文地址:https://www.cnblogs.com/timeObjserver/p/5969319.html
Copyright © 2011-2022 走看看