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解决方案是推荐的选项?
这让我觉得效率非常低,类似于在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)