Unity — не удается обнаружить OnPointerDown на вложенной созданной сборке

#unity3d

Вопрос:

Я динамически создаю экземпляр сборного устройства, называемого Животным. И в некоторых случаях — я динамически создаю экземпляр вложенного сборного элемента внутри Животного, называемого Морковкой.

Как животные, так и Морковь реализуют IPointerDownHandler и имеют OnPointerDown методы:

 public void OnPointerDown(PointerEventData data)
{
    Debug.Log("POINTER DOWN IN ANIMAL !!!"   data);
}

public void OnPointerDown(PointerEventData data)
{
    Debug.Log("POINTER DOWN IN CARROT !!!"   data);
}
 

Однако — тот, что в морковке, никогда не вызывается. Я всегда получаю журнал отладки из экземпляра Animal.

Есть идеи, почему я не могу обнаружить указатель вниз на обоих, чтобы знать, щелкнул ли пользователь/коснулся моркови или животного, которое ее держит?

Ответ №1:

Морковка меньше или находится позади животного объекта? Объект животного может блокировать передачу лучей. Посмотрите на этот компонент

Возможно, потребуется установить значение false, если вы хотите взаимодействовать с ним, учитывая, что они перекрывают свойство компонента в коде

Комментарии:

1. Спасибо за комментарий, @Armin Морковка не стоит за животным и ничего не блокирует. Для имущества, о котором вы упомянули, — я не вижу такого на животном или морковке. Тем не менее — я смог решить проблему другим способом — и я немного позже опубликую ответ.

Ответ №2:

В конце концов — слушатель в морковке вообще не сработал 🙁 … даже если я удалю слушателя на животном.

Итак, я закончил тем, что преобразовал данные параметра PointerEventData прослушивателя животных в мировую позицию и сравнил ее с transform.position самого Животного — и, таким образом, указал, нажимал ли пользователь на животное или на морковку.

Тупой… но работает 🙂