Unity中如何采用注册监听的方式完成鼠标键盘事件的触发

发布于 2022-09-11 21:36:44 字数 356 浏览 22 评论 0

这个问题一直存在。网上全是在Update中采用轮询的方式监听鼠标键盘事件。

 void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("点击鼠标左键");
        }
    }

一直不喜欢这种方式。
对于鼠标发生了点击(不是点击某个物体),按下某键,触摸屏幕,这些事件属于全局事件,
我喜欢能在任何一个脚本里直接监听这些事件,也就是消息驱动,
而不是消息轮询,在Update函数逐帧判断事件有没有发生。
查了文档不知道怎么做,网上全是Update里判断,请问该怎么做?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷清清 2022-09-18 21:36:44

有以下几个方案:
1.自己实现事件系统。
自己单独写一个EventManager的管理类、EventSystem事件类,自己监听处理,自己派发。其他类只管接受处理,不管事件监听和逻辑判断。
2.使用官方事件系统。
可以在场景根节点添加一个UGUI,保留EventSystem组件,删除Canvas。再在你的主摄像机上添加Physic Raycaster组件。
这样官方事件系统需要的组件就齐了,在你需要接收鼠标事件的物体上添加官方组件EventTrigger,点击上面的Add就可以关联你自己脚本的方法了,常用的鼠标事件和Touch事件都齐了,很好用。
3.脚本中实现void OnMouseDown()方法 鼠标按下后 官方会默认调用该方法。

PS:你的感觉是对的,应该是基于事件驱动的,不应该到处主动轮询。少在Update里写复杂的操作。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文