Unity之UI (二)

六、事件系统

1.消息系统

在UnityEngine.EventSystems命名空间中,使用"IEventSystemHandler"接口。

public interface ICustomMessageTarget : IEventSystemHandler
{
    // 可通过消息系统调用的函数
    void Message1();
    void Message2();
} 

定义此接口后,可以用MonoBehaviour实现,定义了在针对此 MonoBehaviour 游戏对象发出指定消息时将会执行的函数。

public class CustomMessageTarget : MonoBehaviour, ICustomMessageTarget
{
    public void Message1()
    {
        Debug.Log ("Message 1 received");
    }

    public void Message2()
    {
        Debug.Log ("Message 2 received");
    }
}

2.输入模块

(1)独立输入模块

当鼠标/输入设备移动时,该模块将指针事件发送到组件,并使用图形射线投射器 (Graphics Raycaster)和物理射线投射器 (Physics Raycaster) 来计算给定指针设备当前指向的元素。您可以配置这些射线投射器来检测或忽略场景的某些部分,从而满足您的要求。
在这里插入图片描述
该模块:

使用垂直/水平轴进行键盘和控制器导航
使用 Submit/Cancel 按钮发送提交和取消事件
在事件之间有一个超时值仅允许每秒的最大事件数。
该模块的流程如下

如果输入了 Input 窗口中的有效轴,则向所选对象发送 Move 事件
如果按下了 Submit 或 Cancel 按钮,则向所选对象发送 Submit 或 Cancel 事件
处理鼠标输入
如果这是新的按压操作
发送 PointerEnter 事件(向上发送到层级视图中可对其进行处理的每个对象)
发送 PointerPress 事件
缓存拖动处理程序(层级视图中可对其进行处理的第一个元素)
将 BeginDrag 事件发送到拖动处理程序
在事件系统中将“Pressed”对象设置为 Selected
如果这是持续按压操作
处理移动
将 DragEvent 发送到缓存的拖动处理程序
如果触摸在对象之间移动,则处理 PointerEnter 和 PointerExit 事件
如果这是释放操作
将 PointerUp 事件发送到收到 PointerPress 的对象
如果当前悬停对象与 PointerPress 对象相同,则发送 PointerClick 事件
如果缓存了拖动处理程序,则发送 Drop 事件
将 EndDrag 事件发送到缓存的拖动处理程序
处理滚轮事件

(2)触摸输入模块

该模块设计用于触摸设备,可发送触摸和拖动操作的指针事件来响应用户输入。该模块支持多点触控。

该模块使用场景配置的射线投射器来计算当前正在触摸的元素。每次当前触摸操作都将相应发出射线投射。
在这里插入图片描述该模块的流程如下:

对于每个触摸事件
如果这是新的按压操作
发送 PointerEnter 事件(向上发送到层级视图中可对其进行处理的每个对象)
发送 PointerPress 事件
缓存拖动处理程序(层级视图中可对其进行处理的第一个元素)
将 BeginDrag 事件发送到拖动处理程序
在事件系统中将“Pressed”对象设置为 Selected
如果这是持续按压操作
处理移动
将 DragEvent 发送到缓存的拖动处理程序
如果触摸在对象之间移动,则处理 PointerEnter 和 PointerExit 事件
如果这是释放操作
将 PointerUp 事件发送到收到 PointerPress 的对象
如果当前悬停对象与 PointerPress 对象相同,则发送 PointerClick 事件
如果缓存了拖动处理程序,则发送 Drop 事件
将 EndDrag 事件发送到缓存的拖动处理程序

3.支持的事件

独立输入模块和触摸输入模块支持的事件由接口提供,通过实现该接口即可在 MonoBehaviour 上实现这些事件。如果配置了有效的事件系统,则会在正确的时间调用事件。

IPointerEnterHandler - OnPointerEnter - 当指针进入对象时调用
IPointerExitHandler - OnPointerExit - 当指针退出对象时调用
IPointerDownHandler - OnPointerDown - 在对象上按下指针时调用
IPointerUpHandler - OnPointerUp - 松开指针时调用(在指针正在点击的游戏对象上调用)
IPointerClickHandler - OnPointerClick - 在同一对象上按下再松开指针时调用
IInitializePotentialDragHandler - OnInitializePotentialDrag - 在找到拖动目标时调用,可用于初始化值
IBeginDragHandler - OnBeginDrag - 即将开始拖动时在拖动对象上调用
IDragHandler - OnDrag - 发生拖动时在拖动对象上调用
IEndDragHandler - OnEndDrag - 拖动完成时在拖动对象上调用
IDropHandler - OnDrop - 在拖动目标对象上调用
IScrollHandler - OnScroll - 当鼠标滚轮滚动时调用
IUpdateSelectedHandler - OnUpdateSelected - 每次勾选时在选定对象上调用
ISelectHandler - OnSelect - 当对象成为选定对象时调用
IDeselectHandler - OnDeselect - 取消选择选定对象时调用
IMoveHandler - OnMove - 发生移动事件(上、下、左、右等)时调用
ISubmitHandler - OnSubmit - 按下 Submit 按钮时调用
ICancelHandler - OnCancel - 按下 Cancel 按钮时调用

4.射线投射器

事件系统需要一种方法来检测当前输入事件需要发送到的位置,而此方法由射线投射器 (Raycaster) 提供。给定屏幕空间位置的情况下,射线投射器将收集所有潜在目标,确定它们是否在给定位置下,然后返回最接近屏幕的对象。提供了几种类型的射线投射器:

(1)图形射线投射器 (Graphic Raycaster) - 用于 UI 元素,位于画布上,并在画布中搜索

(2)2D 物理射线投射器 (Physics 2D Raycaster) - 用于 2D 物理元素

(3)物理射线投射器 (Physics Raycaster) - 用于 3D 物理元素

当场景中存在并启用了射线投射器时,只要从输入模块发出查询,事件系统就会使用该射线投射器。
如果使用多个射线投射器,那么这些射线投射器都会进行针对性投射,并且结果将根据与元素的距离进行排序。

七、富文本

1.标记格式

将文本的一部分包含在一对匹配标签内:
在这里插入图片描述
如示例所示,标签就是“尖括号”字符 < 和 > 内的文本片段。
在这里插入图片描述
标记的文本部分(包括将其包裹的标签)称为元素。

2.标签参数

有些标签对文本具有简单的“全有或全无”(all-or-nothing) 效果,但其他标签可能允许变化。例如,color 标签需要知道要应用的颜色。应使用参数将此类信息添加到标签中:

在这里插入图片描述标签参数不能包含空格。支持的标签有:
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值