Событие 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, так что ожидайте пройти через много вещей, чтобы выполнить простую задачу.