Событие Click Всегда получать только последний экземпляр объекта (C# UNITY)

Я знаю, что это может быть дубликатом " Как обнаружить события нажатия / касания" в пользовательском интерфейсе и объектах GameObjects, но я на самом деле попробовал, что там. Но моя проблема все еще существует.

Вот мой код

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

Эта строка кода выше, как я создаю свои спрайты, и это похоже на мою иерархию

чипсы 1

чипсы 2

чипсы 3

чипсы 4

чипсы 5

Теперь, когда я пытаюсь поместить эту строку кода в UI Button

public void TestClickEvent(){
   Debug.Log("This object is :" + o.transform.gameobject.name);
}

Теперь, когда я нажимаю только на экземпляр объекта chips 5 будет только вывод на моей консоли. Даже если я нажму первый, второй и т. Д. Instantiated Object

Может кто-нибудь, пожалуйста, помогите мне.

То, что я пытаюсь сделать, это получить назначенный номер каждого Intantiated Object например

Если я нажму chips 1 тогда он выведет This object is : 1;

2 ответа

Решение

Нашел мое решение вместо Camera.main Я старался UICamera.currentCamera вместо

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

Вы используете NGUI, и способ обнаружения события нажатия полностью отличается от того, который вы использовали бы в пользовательском интерфейсе Unity. При обнаружении щелчка Raycast может работать, но это не рекомендуемый способ сделать это. Всегда используйте для этого события обратного вызова.

Вы можете сделать это с UIEventListener,

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

Там действительно нет четких примеров для NGUI, так что ожидайте пройти через много вещей, чтобы выполнить простую задачу.

Другие вопросы по тегам