我的代码中存在一个错误:当我将鼠标释放出屏幕时,Unity无法检测到“GetMouseButtonUp”,并且当我将释放的鼠标移回屏幕时,它会检测到“GetMouseButton”,它应该不。如何模拟鼠标事件?
所以当鼠标离开屏幕时,我想模拟发送一个鼠标事件,让统一检测“GetMouseButtonUp”。
如何模拟鼠标事件?
我的代码中存在一个错误:当我将鼠标释放出屏幕时,Unity无法检测到“GetMouseButtonUp”,并且当我将释放的鼠标移回屏幕时,它会检测到“GetMouseButton”,它应该不。如何模拟鼠标事件?
所以当鼠标离开屏幕时,我想模拟发送一个鼠标事件,让统一检测“GetMouseButtonUp”。
如何模拟鼠标事件?
伪代码
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
}
问题是,有时当鼠标移出游戏然后释放时,我无法检测到“GetMouseButtonUp”。当它回退(已发布)时,统一检测到“GetMouseButton”状态。 – zhangjiangtao
好吧我想我现在明白,现在尝试 – maksymiuk
我不知道我是否正确地理解你的问题。但是,你可以使用这些功能以同样的方式,你会使用Start()
Update()
Awake()
等功能
void OnMouseUp() {
}
void OnMouseDown(){
}
我认为这些功能只在GameObject有碰撞组件时才起作用,并且只适用于这个gameobject。他们不是吗? – zhangjiangtao
是的,游戏对象确实需要一个对撞机,并且只有当游戏物体上的鼠标按钮处于关闭状态时才会触发它们。 –
这是发生在单独的编辑器? –
不,这个错误只发生在我将我的webgl链接附加到facebook应用程序时,并且通过Facebook玩游戏会发现它。但是当我通过我的webgl链接玩我的游戏时,这不会发生。所以我很困惑。 – zhangjiangtao
嗯..你可以使用OnApplicationFocus(bool),并且当你拖动移动屏幕的指针时,看看它的值是否为false?如果确实如此,问题就解决了。否则,可能不得不使用Camera.ScreenToViewportPoint –