Unity全球鼠标事件

zoo*_*src 5 mouse events unity-game-engine mousedown unityscript

大多数Unity教程建议在Update函数中使用Mouse事件,如下所示:

function Update () {

   if (UnityEngine.Input.GetMouseButton(1)) { 

   } 

}
Run Code Online (Sandbox Code Playgroud)

这让我觉得效率非常低,类似于在AS中使用onEnterFrame或在JS中使用setInterval来为整个应用程序供电 - 我真的更喜欢使用基于事件的系统.

OnMouseDown()方法很有用,但只有在MouseDown位于对象上时才会触发,而不是在场景中的任何位置触发.

所以这里有一个问题:Unity中是否有MouseEvent用于检测鼠标按钮是否全局关闭,还是Update解决方案是推荐的选项?

Hei*_*bug 6

这让我觉得效率非常低,类似于在AS中使用onEnterFrame或在JS中使用setInterval来为整个应用程序供电 - 我真的更喜欢使用基于事件的系统.

正如评论中已经指出的那样,这不是必须降低效率.每个基于事件的系统可能使用类似于幕后的轮询例程,以给定频率更新.

在许多游戏引擎/框架中,您将找到一种基于轮询的输入处理方法.我认为这与输入更新频率与帧速率/更新循环频率直接相关的事实有关.实际上,以比游戏循环更高或更低的频率收听输入没有多大意义.

所以这里有一个问题:Unity中是否有MouseEvent用于检测鼠标按钮是否全局关闭,还是Update解决方案是推荐的选项?

不,没有.顺便说一句,如果你想要你可以将鼠标输入检测包装在一个类中,并从其他类可以注册到的那里公开事件.就像是:

public class MouseInputHandler : MonoBehavior
{
  public event Action<Vector2> MousePressed;
  public event Action<Vector2> MouseMoved;
  ...

  void Update()
  {
    if (Input.GetMouseButton(0))
    {
      MousePressed(Input.mousePosition);
      ...
    }
  }

}
Run Code Online (Sandbox Code Playgroud)