我的代碼中存在一個錯誤:當我將鼠標釋放出屏幕時,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 –