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

大漠刀客
  • 185

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

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

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

回复
阅读 5.3k
1 个回答
冰封百度
  • 196
✓ 已被采纳

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

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