2013-12-14 28 views
10

我想刪除點擊鼠標的對象。我正在使用新的Unity3D 4.3製作2D遊戲。這裏是我正在使用的代碼光線投射尋找單擊對象的鼠標點擊二維遊戲

void Update() { 

    if (Input.GetMouseButtonDown(0)) 
    { 
     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
     RaycastHit hit; 
     if(Physics.Raycast(ray,out hit)) 
     { 
      isHit = false; 
      Destroy(GameObject.Find(hit.collider.gameObject.name)); 

     } 
    } 

} 

該控件未進入內部if循環。 (isHit未被設置爲false)。

+1

對象是否有對撞機?它有一個對撞機和一個剛體嗎? –

+0

是的,它包含一個對撞機和一個剛體 –

+3

我使用Physics2D,它的工作原理! 這是修改後的代碼 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector2 orgin = new Vector2(ray.origin.x,ray.origin.y);RaycastHit2D hit = Physics2D.Linecast(orgin,-Vector2.up,1 << LayerMask.NameToLayer(「Supports」)); Destroy(hit.collider.gameObject); 但現在,當即使我在其他地方單擊對象被刪除.. 我認爲這個問題是與光線投射方向是-Vector2.up .. 我應該投哪個方向來?? –

回答

1

您必須首先在對象上附加網格碰撞器(任何碰撞器)才能輸入內部If。然後,

Destroy(hit.collider.gameObject); 

將簡單地做這項工作。

這裏可能還有其他的工作。

void Update() { 

    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
    RaycastHit hit; 

    if(Physics.Raycast(ray,out hit)) 
    { 
     if(Input.GetMouseButtonDown(0)) 
     { 
      isHit = false; 
      Destroy(hit.collider.gameObject); 
     } 
    } 
} 
19

你不能在新的2D東西上使用3D物理功能。改爲使用2D functions。例如:

RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); 

if(hit.collider != null) 
{ 
    Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position); 
} 
6

這個問題是有點老了,但我一直在尋找AA的方式來獲得與團結2D鼠標點擊遊戲物體和歐空局的回答幾乎幫我,但我買不起爲了使它工作,所以通過一些研究,我看到Camera.main.ScreenToWorldPoint正在返回攝像機屏幕區域的中心,並且正確地工作。它需要輸入相機和最近的GameObject在Z位置的差異。我的相機在-10默認設置,我的GameObject是0,所以我需要做的就是將我的Input.mousePosition.z設置爲10.所以,如果你遇到問題與Esa的代碼(如我:()代碼箱可以幫助您:

RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10)), Vector2.zero); 

if(hit.collider != null) 
{ 
    Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position); 
} 
1

首先任何類型的2D撞機連接到你的遊戲對象,然後選擇這些解決方案之一;

1種情況 - 如果有超過1個遊戲物體上的每個頂部其他,並試圖瞭解特定的GameObject被點擊:

void Update() 
{ 
    if (Input.GetMouseButtonDown (0)) { 
     Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
     RaycastHit2D[] hits = Physics2D.GetRayIntersectionAll (ray, Mathf.Infinity); 
     foreach (var hit in hits) { 
      if (hit.collider.name == name) { 
       MyFunction(); 
      } 
     } 
    } 
} 

第二種情況 - 我f只有1個遊戲對象,並試圖瞭解它是否被點擊:

void Update() 
{ 
    if (Input.GetMouseButtonDown (0)) { 
     Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
     RaycastHit2D hit = Physics2D.GetRayIntersection (ray, Mathf.Infinity); 
     if (hit.collider != null && hit.collider.name == name) { 
      MyFunction(); 
     } 
    } 
}