EventSystem

 

The EventSystem is a way of sending events to objects in the application based on input, be it keyboard, mouse, touch, or custom input. The EventSystem consists of a few components that work together to send events.

Overview

When you add an EventSystem component to a GameObject you will notice that it does not have much functionality exposed, this is because the EventSystem itself is designed as a manager and facilitator of communication between EventSystem modules.

The primary roles of the EventSystem are as follows:

  • Manage which GameObject is considered selected
  • Manage which InputModule is in use
  • Manage Raycasting (if required)
  • Updating all InputModules as required

Input Modules

An input module is where the main logic of how you want the EventSystem to behave lives, they are used for

  • Handling Input
  • Managing event state
  • Sending events to scene objects.

Only one InputModule can be active in the EventSystem at a time, and they must be components on the same GameObject as the EventSystem component.

If you wish to write a custom input module it is recommended that you send events supported by existing UI components in Unity, but you are also able to extend and write your own events as detailed in the Messaging System documentation.

Raycasters

Raycasters are used for sending figuring out what the pointer is over, it is common for InputModules to use the Raycasters configured in the scene to calculate what the pointing device is over.

There are 3 provided Raycasters that exist by default:

  • GraphicRaycaster - Used for UI elements
  • 2DPhysicsRaycaster - Used for 2D physics elements
  • 3DPhysicsRaycaster - Used for 3D physics elements

If you have a 2d / 3d Raycaster configured in your scene it is easily possible to have non UI elements receive messages from the InputModule. Simply attach a script that implements one of the event interfaces.

Supported Events

 

The Eventsystem supports a number of events, and they can be customised further in user custom user written InputModules.

The events that are supported by the StandaloneInputModule and TouchInputModule are provided by interface and can be implemented on a MonoBehaviour by implementing the interface. If you have a valid EventSystem configured the events will be called at the correct time.

  • IPointerEnterHandler - OnPointerEnter - Called when a pointer enters the object
  • IPointerExitHandler - OnPointerExit - Called when a pointer exits the object
  • IPointerDownHandler - OnPointerDown - Called when a pointer is pressed on the object
  • IPointerUpHandler - OnPointerUp - Called when a pointer is released (called on the original the pressed object)
  • IPointerClickHandler - OnPointerClick - Called when a pointer is pressed and released on the same object
  • IInitializePotentialDragHandler - OnInitializePotentialDrag - Called when a drag target is found, can be used to initialise values
  • IBeginDragHandler - OnBeginDrag - Called on the drag object when dragging is about to begin
  • IDragHandler - OnDrag - Called on the drag object when a drag is happening
  • IEndDragHandler - OnEndDrag - Called on the drag object when a drag finishes
  • IDropHandler - OnDrop - Called on the object where a drag finishes
  • IScrollHandler - OnScroll - Called when a mouse wheel scrolls
  • IUpdateSelectedHandler - OnUpdateSelected - Called on the selected object each tick
  • ISelectHandler - OnSelect - Called when the object becomes the selected object
  • IDeselectHandler - OnDeselect - Called on the selected object becomes deselected
  • IMoveHandler - OnMove - Called when a move event occurs (left, right, up, down, ect)
  • ISubmitHandler - OnSubmit - Called when the submit button is pressed
  • ICancelHandler - OnCancel - Called when the cancel button is pressed

最新文章

  1. hdu 3401 单调队列优化DP
  2. Android 学习 (一)
  3. Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次
  4. Atitit 数据存储的数据表连接attilax总结
  5. Android 开机启动
  6. 100行JS实现HTML5的3D贪吃蛇游戏
  7. 几个常用myeclipse快捷键
  8. 自定义web浏览器(五)
  9. mysql.cnf 配制文件详解
  10. PRINCE2 有级别吗?
  11. Socket层实现系列 — getsockname()和getpeername()的实现
  12. MySQL8.0
  13. thingsboard填坑之路
  14. Python 字符串十六进制流
  15. day40 mycql 视图,触发器,存储过程,函数
  16. ArchLinux安装Sublime Text 3
  17. Linux 查看dns运行状态
  18. 用Python实现数据结构之队列
  19. c++11の多线程应用
  20. [蓝桥杯]ALGO-116.算法训练_最大的算式

热门文章

  1. IOS NSKeyedArchiver(归档存取数据)
  2. codeforces 600C Make Palindrome
  3. JavaScript中的confirm的用法
  4. 深入理解Java GC
  5. SpringBoot学习2:springboot整合servlet
  6. MySQL - DELETE 多表联合条件删除
  7. (80)zabbix性能优化中的几个建议
  8. docker安装后无法启动问题
  9. MongDB之各种修改操作
  10. CMDB(资产管理系统) day1