2015-08-20 123 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

是的,遊戲對象確實需要一個對撞機,並且只有當遊戲物體上的鼠標按鈕處於關閉狀態時纔會觸發它們。 –