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

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

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

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

阅读 7.8k
1 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进