2015-08-20 129 views
0

我的代码中存在一个错误:当我将鼠标释放出屏幕时,Unity无法检测到“GetMouseButtonUp”,并且当我将释放的鼠标移回屏幕时,它会检测到“GetMouseButton”,它应该不。如何模拟鼠标事件?

所以当鼠标离开屏幕时,我想模拟发送一个鼠标事件,让统一检测“GetMouseButtonUp”。

如何模拟鼠标事件?

+0

这是发生在单独的编辑器? –

+0

不,这个错误只发生在我将我的webgl链接附加到facebook应用程序时,并且通过Facebook玩游戏会发现它。但是当我通过我的webgl链接玩我的游戏时,这不会发生。所以我很困惑。 – zhangjiangtao

+0

嗯..你可以使用OnApplicationFocus(bool),并且当你拖动移动屏幕的指针时,看看它的值是否为false?如果确实如此,问题就解决了。否则,可能不得不使用Camera.ScreenToViewportPoint –

回答

1

伪代码

bool mouseIsDown = false; 

public void Update() 
{ 
    Rect screenRect = new Rect(-Screen.width/2, -Screen.height/2, Screen.width, Screen.height); 

    If(screenRect.Contains(Input.mousePosition)) 
    { 
     if(mouseIsDown && !Input.GetMouseButton(0)) 
      OnMouseUp(); 

     if(Input.GetMouseButton(0)) 
     { 
      OnMouse(); 
      if(!mouseIsDown) 
      { 
       OnMouseDown(); 
       mouseIsDown = true; 
      } 
     } 
    } 
} 

public void OnMouseDown() 
{ 
    // Do something 
} 

public void OnMouse() 
{ 
    // Do something 
} 

public void OnMouseUp() 
{ 
    // Do something 
} 
+0

问题是,有时当鼠标移出游戏然后释放时,我无法检测到“GetMouseButtonUp”。当它回退(已发布)时,统一检测到“GetMouseButton”状态。 – zhangjiangtao

+0

好吧我想我现在明白,现在尝试 – maksymiuk

-1

我不知道我是否正确地理解你的问题。但是,你可以使用这些功能以同样的方式,你会使用Start()Update()Awake()等功能

void OnMouseUp() { 
} 

void OnMouseDown(){ 
} 
+0

我认为这些功能只在GameObject有碰撞组件时才起作用,并且只适用于这个gameobject。他们不是吗? – zhangjiangtao

+0

是的,游戏对象确实需要一个对撞机,并且只有当游戏物体上的鼠标按钮处于关闭状态时才会触发它们。 –