2015-09-07 45 views
0

我已創建使用Unity3d在我的2D遊戲的按鈕,添加盒撞機2D與名PADBASE來檢測觸摸事件是這樣的:Unity3D觸摸事件結合

if(Input.touchCount > 0) 
{ 
    for(int i = 0; i < Input.touchCount; i++) 
    { 
     Vector3 mouseWorldPos3D = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position); 
     Vector2 mousePos2D = new Vector2(mouseWorldPos3D.x, mouseWorldPos3D.y); 
     Vector2 dir = Vector2.zero; 
     RaycastHit2D hit = Physics2D.Raycast(mousePos2D, dir); 
     Touch t = Input.GetTouch(i); 

     if (hit.transform != null) 
     { 
      if(Physics2D.Raycast (hit.transform.position , hit.transform.forward)) 
      { 
       GameObject recipient = hit.transform.gameObject; 

       if(t.phase == TouchPhase.Began) //poczatek dotyku 
       { 
        // button clicked 

        // change colour to red to visually show that button is being pressed 
       } 
       else if (t.phase == TouchPhase.Ended) 
       { 
        // change collor to its default colour to visually show that its no longer pressed 
       } 
      } 

     } 
    } 
} 

讓我們假設我將按鈕的顏色變爲紅色當玩家觸摸按鈕,返回到其默認的顏色,當他發佈了他的手指(例如)

現在它顯然會工作,只有當玩家將釋放他的手指,只要他的手指居然是裏面的盒子的邊界對撞機,我試圖做的是「綁定觸摸事件(?)」,即使玩家移動了他的手指,仍然可以捕捉觸摸事件(滑動或結束)沒有釋放他的手指(例如不小心)對撞機的對角線

我期待着一些建議,謝謝。

在我的遊戲中,我將有多個按鈕,所以多點觸摸是必要的。

回答

0

解決了,它實際上變得非常簡單,您需要存儲和比較觸摸手指ID。

解決方案:

- 觸摸開始:

檢查,如果觸摸withing遊戲對象框撞機像上面附着的代碼。

得到觸摸手指ID,並把它傳遞給你的按鈕或它的參考

- 觸摸結束:

比較觸摸手指ID與存儲的觸摸ID,如果他們是平等的,設置您存儲的手指ID爲-1,並執行你的代碼,應該在觸摸執行edned

- 觸摸移動或(||)固定:

對觸摸ID進行相同的比較,就像觸摸結束一樣,並執行您的代碼,如果播放器將滑動/移動他的手指,但不要修改您的手指ID變量,則應執行該代碼。

就是這樣,它適用於多點觸控多按鈕。