2013-12-14 32 views
10

Farenin tıklatıldığı nesneyi silmeye çalışıyorum. Yeni Unity3D 4.3 kullanarak bir 2D oyun yapıyorum. İşte ben kullanıyorum kod iç iç döngü girmiyor. (isHit, false olarak ayarlanmıyor).Birlik içinde mouseclick bulmak için Raycasting Birlik içinde nesne 2d oyunlar

+1

Nesnede bir çarpıştırıcı var mı? Bir çarpıştırıcı ve sert bir gövdesi var mı? –

+0

Evet, bir çarpıştırıcı ve bir sert kullanıcı içerir –

+3

Ben Physics2D kullanıyorum ve işe yarıyor! Bu değiştirilmiş kod Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); Vector2 orgin = yeni Vector2 (ray.origin.x, ray.origin.y); RaycastHit2D hit = Fizik2D.Linecast (orgin, -Vector2.up, 1 << LayerMask.NameToLayer ("Supports")); Destroy (hit.collider.gameObject); i başka yerlerde tıkladığınızda bile nesne silindiğinde Ama şimdi .. ben bunu kullanması gereklidir yönü ?? etmek .. sorun raycast yönü -Vector2.up olmak olduğunu düşünüyorum –

cevap

1

İç içe girebilmek için önce nesnenizle bir örgü çarpıştırıcısı (herhangi bir çarpıştırıcı) iliştirmelisiniz. Sonra, sadece işi yapacak olan

.

Burada başka bir çalışma olabilir.

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

Yeni 2D malzemelerde 3B fizik işlevlerini kullanamazsınız. Bunun yerine 2D functions kullanın. Örnek:

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

Bu soru biraz eski ama birlik 2B'de bir fare tıklaması ile bir GameObject almak için aa yol arıyordu ve Esa gelen cevap neredeyse bana yardımcı ama yetmeyeceğini Çalışmak için, biraz araştırma ile Camera.main.ScreenToWorldPoint'in kamera ekranının ortasını döndürdüğünü ve doğru çalıştığını gördüm. kameradaki Z pozisyonu ile en yakın GameObject arasındaki farkı girmek zorundaydı. Kameram varsayılan olarak -10 olarak ayarlandı ve GameObject 0'daydı, bu yüzden tüm yapmanız gereken Input.mousePosition.z'imi 10'a ayarlamaktır. Yani Esa'nın kodu ile çalışmakta sorun yaşıyorsanız (benim gibi :() kod feryat size yardımcı olabilir:

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

Önce GameObject 2D çarpıştırıcılarının türlü takmak, daha sonra bu çözümlerden birini seçmek;

1 Vaka - her üstünde 1'den fazla GameObject varsa diğer, ve anlamaya çalıştığınızda, belirli GameObject tıklanır:

2. Durum - I f sadece 1 GameObject var ve tıklanmış olup olmadığını anlamaya çalışın:

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(); 
     } 
    } 
}