2017-10-20 101 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

:)))....谢谢 –