Unity EventSystem的一些理解和使用

这篇具有很好参考价值的文章主要介绍了Unity EventSystem的一些理解和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity的EventSystem是用于处理用户输入和交互的系统。它是Unity UI系统的核心组件之一,可以用于捕捉和分发各种事件,例如点击、拖拽、按键、射线等。

常用的属性和方法有以下这些:

属性:

  • current: 获取当前的EventSystem实例。
  • sendNavigationEvents: 一个布尔值,表示是否发送导航事件。
  • pixelDragThreshold: 拖动的像素阈值。
  • currentInputModule: 获取当前激活的InputModule实例。

方法: 

  • IsPointerOverGameObject(int pointerId): 检查指定的指针事件是否发生在UI元素上。
  • SetSelectedGameObject(GameObject selected): 设置当前选中的游戏对象,默认使用PointerInputModule来处理选中事件。
  • SetSelectedGameObject(GameObject selected, BaseEventData pointer): 设置当前选中的游戏对象,并传递BaseEventData参数。
  • Raycast(PointerEventData eventData, List<RaycastResult> resultAppendList): 执行射线检测并返回与射线相交的最上层的UI元素。

常见用法:

1、 获取当前点击的UI元素:

EventSystem eventSystem = EventSystem.current;
GameObject selectedObject = eventSystem.currentSelectedGameObject;

2、判断鼠标或指定指针是否在UI元素上:

//不带参数,pointerId默认为-1,表示鼠标左键
EventSystem eventSystem = EventSystem.current;
bool isPointerOverUI = eventSystem.IsPointerOverGameObject();

//带参数指定指针
bool isPointerOverUI1 = EventSystem.IsPointerOverGameObject(pointerId);
if (isPointerOverUI1)
{
    // 当前指针在UI上
}

3、设置导航事件的发送:

EventSystem eventSystem = GetComponent<EventSystem>();
eventSystem.sendNavigationEvents = true;

4、设置拖动的像素阈值:

EventSystem eventSystem = GetComponent<EventSystem>();
eventSystem.pixelDragThreshold = 10;

5、当前手指是否触摸在UI上:

EventSystem eventSystem = EventSystem.current;
Touch[] touches = Input.touches;
foreach (Touch touch in touches)
{
    if (eventSystem.IsPointerOverGameObject(touch.fingerId))
    {
        // 当前是否触摸在UI上
    }
}

6、发送自定义事件:

比如我在场景中创建一个组件,如Image并把下面脚本放到组件上,

using UnityEngine;
using UnityEngine.EventSystems;

public class CustomEventHandler : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("你触发了自定义事件");
        // 在这里处理自定义事件的逻辑
    }
}

然后我再创建如下脚本放到场景中:

using UnityEngine;
using UnityEngine.EventSystems;

public class CustomEventTrigger : MonoBehaviour
{
    private void Start()
    {
        // 获取EventSystem实例
        EventSystem eventSystem = EventSystem.current;

        // 获取自定义事件的目标游戏对象
        GameObject targetObject = GameObject.Find("Image");

        // 触发自定义事件
        eventSystem.SetSelectedGameObject(targetObject);
    }
}

当我点击''Image"时就可以触发自定义事件了,如下图。

eventsystem.current,unity,游戏引擎,c#文章来源地址https://www.toymoban.com/news/detail-853774.html

到了这里,关于Unity EventSystem的一些理解和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Canvas、Canvas Scaler、Graphic Raycaster、EventSystem 组件详解

    https://blog.csdn.net/qq_33789001/article/details/117781577 https://blog.csdn.net/q764424567/article/details/119923544 属性 功能 Pixel Perfect 使UI元素像素对应,效果就是边缘清晰不模糊 Sort Order 多个Canvas时,数值越大越后渲染。值大的 画布,会挡住值小的 Target Display 目标显示器,如果有多个屏幕的话可

    2024年01月21日
    浏览(63)
  • EventSystem 事件系统

    事件系统在开发中必不可少事件系统使用观察者模式可以极大程度降低程序的耦合,之前的文章也讲过事件系统但是不够高效简洁,如何轻便高效优雅的实现一个事件呢?依然基于之前的AssemblyManager 程序集管理器和SingletonSystem 单例管理系统进行开发,主要原理也是根据反射

    2024年02月09日
    浏览(39)
  • ET介绍——事件机制EventSystem

    ECS最重要的特性一是数据跟逻辑分离,二是数据驱动逻辑。什么是数据驱动逻辑呢?不太好理解,我们举个例子 一个moba游戏,英雄都有血条,血条会在人物头上显示,也会在左上方头像UI上显示。这时候服务端发来一个扣血消息。我们怎么处理这个消息?第一种方法,在消息

    2024年02月05日
    浏览(43)
  • 球谐函数的一些理解(基于3DGS)+Unity的可视化

    1.背景 读3DGS的相关文章的时候提到了一些球谐函数的概念,有些不理解,结合下面的文章做一些扩展 2.参考链接 球谐函数介绍(Spherical Harmonics) - 知乎 (zhihu.com) 球谐函数一:基础理论 - 知乎 (zhihu.com) 3.细节 这里是整篇文章的最关键的举例子解释,但是由于对极坐标不太了解

    2024年04月08日
    浏览(72)
  • 【Unity】在Unity下使用websocket的一些经验

    首先,先上大家都知道的简介,这一版是我认为比较清晰的。。。虽然在度娘的教导和知乎的教导下,总算认识了websocket,但这个过程比较艰辛,给大家发出来看一下: --------------------------------------------------------------------------------------------------------------------------------- WebSock

    2024年02月10日
    浏览(43)
  • 使用VSCode开发Unity中排除(隐藏)一些文件

    再使用VDCode开发的时候会将项目中的全部文件都显示出来,不像VS一样只显示一些可能用的到的文件。再VSCode中需要设置一些文件的过滤来只显示想要显示的文件。 打开VScode,打开设置搜索:“Files:Exclude” 然后添加一些排除的项目。 排除文件 排除文件夹

    2024年02月14日
    浏览(38)
  • Unity C# 之 Task、async和 await 结合使用的一些情况处理

    目录 Unity C# 之 Task、async和 await  结合使用的一些情况处理 一、简单介绍 二、把 async 函数,通过变化转为一般的函数 三、在 async 函数中,切换到主线程,并等待主线程执行完毕,继续 async 中的代码 Unity 在使用 Task 结合 async (await) 的时候,偶尔会遇到一些特殊情况,需要

    2024年01月22日
    浏览(46)
  • Unity中的一些PropertyAttribute(如[Header(“xxx“)])的用法与详细使用案例

     该代码用于在Inspector面板上给之后定义的puclic变量加一个标题.具体用法如下  使用之后可以看出在Inspector面板上Header之下的变量前都多出了一个标题,可以方便我们在图形化界面管理大量拥有相同变量的单位. 可以用于在Inspector上形成一个空隙,可以添加变量 如[Space(10)] 用法

    2024年02月15日
    浏览(39)
  • Unity 布娃娃插件Ragdoll Mecanim Mixer入门使用介绍以及一些坑

    RagdollConstructor 主要配置角色Ragdoll 的数据和每个关节的碰撞体 RamecanMixer 对布娃娃系统物理效果的控制 相对比unity自带的布娃娃系统,他这个可以和动画系统很好的混合一起,前者则只能布娃娃/动画器二选一控制 首先配置RagdollConstructor 关节连接节点,头对头关节手对手连接

    2023年04月08日
    浏览(45)
  • 【unity实战】随机地下城生成2——绘制地图Tilemap的使用及一些技巧的使用(含源码)

    参考原视频链接: 【视频】:https://space.bilibili.com/370283072 注意 :本文为学习笔记记录,推荐支持原作者,去看原视频自己手敲代码理解更加深入 修改素材配置 切割图片 绘制瓦片地图 先新建我们的调色盘,保存好位置 拖入我们刚才切片好的素材 在房间预设体创建我们的瓦

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包