#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 самого Животного — и, таким образом, указал, нажимал ли пользователь на животное или на морковку.
Тупой… но работает 🙂