2015-11-12 72 views
2

我正在開發簡單的修復它的遊戲類。在這裏,如果我點擊對象,它會在背景層前面實例化新圖層。但問題是當我點擊頂層時,點擊也會影響背景圖層。如何避免它。我在頂層使用了基於圖層的碰撞和碰撞,但沒用。請任何人都給我任何想法...在此先感謝。如何忽略鼠標點擊背景圖層或對象?

+0

您可以在物件上添加標籤,並且您可以在點擊時檢查其標籤? –

+0

@ Sir.WaLeK是的,但它更復雜,因爲我們需要檢查每次點擊。 – Albertkaruna

回答

2

我推薦使用raycast。單擊時,從鼠標光標投射到場景中,並檢查對象的標記(或其他屬性,如果需要的話)。這樣,您不必在許多不同的對象上使用OnMouseOver()或OnMouseDown(),並將邏輯放在一個地方。

它也更靈活,例如,您可以指定光線投射的範圍以及忽略某些圖層。

2

3D還是2D?

檢查了這一點:OnMouseDown on box collider 2D not firing

我還要檢查特定的標籤創造不同的模式進行檢查,等等。

int mode=0; 

在 '模式0' 將檢查在 '模式1' 爲#basicLayers碰撞, 將檢查#topLayers

贊(使用上述鏈路答案+建議):

void check3DObjectClicked() 
{ 
    if (Input.GetMouseButtonDown (0)) { 

     RaycastHit hitInfo = new RaycastHit(); 
     if (Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hitInfo)) { 
      Debug.Log ("Object Hit is " + hitInfo.collider.gameObject.name); 

      switch(mode){ 
      case 0: 
       if (hitInfo.collider.gameObject.CompareTag ("basicLayerObject1"){ 
        mode=1; 
        //do stuff 
       } 
      break; 

      case 1: 
       if (hitInfo.collider.gameObject.CompareTag ("createdTopLayerObj1"){ 
        mode=2; 
        //do stuff 
       }else if (hitInfo.collider.gameObject.CompareTag ("quitTopLayer"){ 
        mode=0; 
        //do stuff 
       } 
       //ignoring basicLayers tagged objects on background. 
      break; 
      } 

     } 
    } 
} 

希望這有道理。

+0

謝謝老兄,它的好方法。 – Albertkaruna

0

在我得到答案之前,我通過使用動畫做到了這一點。如果我與頂層交互,那麼在頂層工作完成後,我從背景中移除背景層,然後我放置背景層。這是好還是壞?