2017-10-20 146 views
0

我有一個包含BoxCollider2D的GameObjects數組。我不知道該怎麼做,當我點擊其中一個自我檢測點擊。MouseEvent && Detect MouseClick Collider

我的意思是,給我一個索引。例如,我點擊位置0上的對象,在控制檯中,我得到值0,在控制檯中單擊位置3上的對象。我得到的值3.

我試圖做一個能夠幫助我的類,但它沒有奏效。

public GameObject[] ColorColliders; 

void Start() 
{ 
    foreach (GameObject coll in ColorColliders) 
     coll.GetOrAddComponent<MouseEventSystem>().MouseEvent += ColorClick; 
} 

private void ColorClick(GameObject target, MouseEventType type) 
{ 
    if(type == MouseEventType.CLICK) 
    { 
     int targetIndex = System.Array.IndexOf(ColorColliders, target); 
     Debug.Log(targetIndex); 
    } 
} 

如果你知道另一種方法,你能幫助我嗎? 謝謝。

回答

0

MouseEventSystem是沒有統一默認。你依靠使用它嗎?如果是這樣,請忽略以下內容。

僅使用統一內容的「最簡單」方法就是使用MonoBehaviour.OnMouseDown - 還有很多其他使用raycasters的方法。

您可能需要根據需要調整以下內容,只是一個簡單的例子。只需將其放在相應的對象上並在檢查員中設置一個索引即可。

using UnityEngine; 

public class ColorSelector : MonoBehaviour { 

    public int index; 

    void OnMouseDown() { 
     Debug.Log(string.Format("Color with index {0} was clicked.", index)); 
    } 

} 

另一種選擇是利用統一的內置的EventSystem,請參閱手冊和教程進一步的信息。 https://docs.unity3d.com/Manual/EventSystem.html Ofc,萬一你遇到麻煩,隨時問。

希望我幫了忙。

+0

好吧,我們已經解決了這個問題。不管怎樣,謝謝。 (Input.GetMouseButtonDown(0)) CastRay(); } void CastRay() Vector2 pos = new Vector2(Input.mousePosition.x,Input.mousePosition.y); RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(pos),Vector2.zero); if(hit) { //做你想做的事 } } –

+0

是的,有很多方法可以做到這一點。很高興你找到一款適合你的產品。 – yes

+0

:)))....謝謝 –