Unity中如何采用注册监听的方式完成鼠标键盘事件的触发
这个问题一直存在。网上全是在Update中采用轮询的方式监听鼠标键盘事件。
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Debug.Log("点击鼠标左键");
}
}
一直不喜欢这种方式。
对于鼠标发生了点击(不是点击某个物体),按下某键,触摸屏幕,这些事件属于全局事件,
我喜欢能在任何一个脚本里直接监听这些事件,也就是消息驱动,
而不是消息轮询,在Update函数逐帧判断事件有没有发生。
查了文档不知道怎么做,网上全是Update里判断,请问该怎么做?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有以下几个方案:
1.自己实现事件系统。
自己单独写一个EventManager的管理类、EventSystem事件类,自己监听处理,自己派发。其他类只管接受处理,不管事件监听和逻辑判断。
2.使用官方事件系统。
可以在场景根节点添加一个UGUI,保留EventSystem组件,删除Canvas。再在你的主摄像机上添加Physic Raycaster组件。
这样官方事件系统需要的组件就齐了,在你需要接收鼠标事件的物体上添加官方组件EventTrigger,点击上面的Add就可以关联你自己脚本的方法了,常用的鼠标事件和Touch事件都齐了,很好用。
3.脚本中实现void OnMouseDown()方法 鼠标按下后 官方会默认调用该方法。
PS:你的感觉是对的,应该是基于事件驱动的,不应该到处主动轮询。少在Update里写复杂的操作。