【Unity】关于EventSystem在3D场景中的应用

【Unity】关于EventSystem在3D场景中的应用

Unity官方文档相对于这一部分的解释:

中文文档:https://connect.unity.com/doc/Manual/EventSystem(感觉这个加载速度很随缘)

英文文档:我是参看编辑器自带的,网址的话大家自行百度,搜索词:unity manual

其实官方文档对于这一部分的解释,相对于其他模块,真的是有一点少,下面我会就官方文档中没有提到的部分跟大家分享讨论。

以下均为个人愚见,请大家带着批判的目光去看,如有指教,敬请评论。

Unity版本:2018.4.11c1

概述

其实从官方文档少的可怜的解释中,有这样一句话:使用事件系统可以根据输入(即键盘、鼠标、触摸或自定义输入)将事件发送到应用程序中的对象。事件系统包含一些共同协作以发送事件的组件。

在UI上的应用

举个最常见的例子,就是UI交互***。在创建UI元素时,系统会自行创建EventSystem*对象,其上添加两个组件:Event System和Standalone Input Module。

而在Canvas上,与EventSystem相关的一个组件则是Graphic Raycaster。

在这里插入图片描述

Event SystemStandalone Input ModuleGraphic Raycaster。这三个构成了之前所说的共同协作以发送事件的组件。而UI系统具体怎样搭建使用,请各位参看官方文档中的描述。

可变动的地方

上述三个组件中,Standalone Input Module可以替换为任何继承自BaseInputModule的组件(Touch Input Module现已弃用,触摸输入的处理在Standalone Input Module中进行)。

Graphic Raycaster亦可替换为Physics 2D RaycasterPhysics Raycaster

在这里插入图片描述

Physcis Raycaster,用于3D物理元素,例如可以实现鼠标与3D物理元素的交互。

Physics 2D Raycaster,用于2D物理元素。

在3D场景中的应用

这一部分是在我的项目中想要使用的,也是本文的重点。

1 - 需要在场景中创建一个EventSystem(UI->Event System)。

2 - 在你所使用的Camera上,添加组件Physics Raycaster。

3 - 在希望以鼠标可交互的对象上添加脚本,实现事件接口(事件接口描述的链接https://connect.unity.com/doc/Manual/SupportedEvents

示例:检测是否在一个Cube上进行鼠标点击,给Cube添加脚本ClickHandler.cs。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class ClickHandler : MonoBehaviour, IPointerDownHandler
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        if (eventData.pointerId == -1)
        {
            Debug.Log("你左键点我了!!");
        } 
        if (eventData.pointerId == -2)
        {
            Debug.Log("你又用右键点我了!!");
        }
        if (eventData.pointerId == -3)
        {
            Debug.Log("好吧,这次是中键。。");
        }
    }
}

效果图如下(动图太麻烦了,就直接一个截图吧):

在这里插入图片描述

以下几点需要注意:

有关于事件处理函数(即本例中的OnPointerDown(PointerEventData eventData)),其参数中的eventData有很多属性,可以参看官方的中文API文档

最后推荐一个我觉得相关的写的不错的文章:http://www.manew.com/home.php?mod=space&uid=56596&do=blog&id=2917&page=1#comment

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值