C# 单击事件始终仅获取最后一个实例化的对象(C UNITY)

C# 单击事件始终仅获取最后一个实例化的对象(C UNITY),c#,unity3d,ngui,C#,Unity3d,Ngui,我知道这可能是一个复制品,但我试过里面有什么。但我的问题仍然存在 这是我的密码 GameObject o = null; private void Start() { for (int i = 0; i < 6; i++) { o = Instantiate(obj) as GameObject; o.transform.SetParent(pos_obj); o.transform.localScale = Vector3.

我知道这可能是一个复制品,但我试过里面有什么。但我的问题仍然存在

这是我的密码

GameObject o = null;
private void Start()
{
    for (int i = 0; i < 6; i++)
    {
        o = Instantiate(obj) as GameObject;
        o.transform.SetParent(pos_obj);
        o.transform.localScale = Vector3.one;
        o.transform.name = "chips " + i;
       
        o.transform.localPosition = new Vector3(0, 0, 0);
        NGUITools.SetActive(o, true);

        UIGridReposition(UIGrid.Sorting.Vertical, true);
    }
}
现在,当我点击实例化的对象时,只有chips 5才是我控制台上的输出。即使单击第一个、第二个etc实例化对象

谁能帮帮我吗

举例来说,我想做的是得到每一个指定数量的物体


如果我点击chips 1,那么它将输出这个对象:1

找到了我的解决方案而不是Camera.main我尝试了UICamera.currentCamera


您使用的是NGUI,检测点击事件的方式与使用Unity的UI的方式完全不同。当检测到单击时,光线投射可能会起作用,但不推荐这样做。始终为此使用回调事件

您可以使用UIEventListener执行此操作


对于NGUI,确实没有明确的例子,因此希望通过大量的工作来完成一项简单的任务。

我将Button=o.GetComponent放在for循环下面,对吗@Programmer@Programmer顺便说一句,先生,这是一个有ui按钮的精灵,我正在使用NGUI,所以您的代码不可能,先生?这很奇怪。我对NGUI不是很确定。但是代码中的某个地方调用了TestClickEvent’,它被分配给所有按钮,指向最后一个实例化的对象。如果这就是您的全部代码,那么它似乎在NGUITools.SetActiveo中,true;`,但这毫无意义。你必须发布一张游戏对象的屏幕截图,上面附有组件。如果你用的是NGUI,那就算了吧,因为我已经很久没有用过它了,也不再使用它了。这只适用于Unity的UII。我会试试这个,因为在box collider 2d上,我的解决方案不起作用
public void TestClickEvent(){
   Debug.Log("This object is :" + o.transform.gameobject.name);
}
public void TestClickEvent()
{
    Vector2 point = UICamera.currentCamera.ScreenToWorldPoint(Input.mousePosition);
    Ray ray = UICamera.currentCamera.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    if (Physics.Raycast(ray, out hit, 100))
    {
        Debug.Log("I hit something :" + hit.collider.gameObject.name);
    }        
}
GameObject o = null;
private void Start()
{
    for (int i = 0; i < 6; i++)
    {
        o = Instantiate(obj) as GameObject;
        o.transform.SetParent(pos_obj);
        o.transform.localScale = Vector3.one;
        o.transform.name = "chips " + i;

        o.transform.localPosition = new Vector3(0, 0, 0);
        NGUITools.SetActive(o, true);

        UIEventListener.Get(o).onClick += TestClickEvent;

        UIGridReposition(UIGrid.Sorting.Vertical, true);
    }
}

void TestClickEvent(GameObject sender) 
{ 
    Debug.Log("Clicked: " + sender.name); 
}