@youkerni
Unity3D developer

Как сделать так, что бы GraphicsRaycaster возвращал все UI элементы которые попали под рейкаст?

Суть: у меня есть scrollrect который можно скроллить по вертикали. Внутри (в его content) есть scrollrect который можно скроллить по горизонтали (их может быть несколько).

У вложенного scrollRect события EventSystem не работают, поэтому я решил сделать следующим образом:
1) Все события отлавливает только родительский ScrollRect;
2) Когда у родительского ScrollRect срабатывает событие OnPointerDown я хочу делать Raycast, который вернет все UI объекты которые попали под Raycast. (Raycast делаю через GraphicRaycaster)
3) Определять вектор направления через OnBeginDrag и в зависимости от него двигать или родительский ScrollRect по вертикали, или один из дочерних (который попал под рейкаст) по горизонтали.

Проблема в том, что Raycast возвращает только один элемент, а не все которые под него попали. В моем случае это снова родительский ScrollRect.
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
так вы приведите пример вашего кода, которым вы уже получили тот самый "один, а не все"

наверное у вас там FindFirstRaycast

а вообще, в общем случае вам надо
EventSystem eventSystem = FindObjectOfType<EventSystem>();
PointerEventData eventData = new PointerEventData(EventSystem.current);
List<RaycastResult> m_RaycastResultCache = new List<RaycastResult>();
 eventSystem.RaycastAll(eventData, m_RaycastResultCache);

for (var i = 0; i < m_RaycastResultCache.Count; ++i)
.....


но это общий принцип как получить список List

это все что было задето текущим поинтером , а там уже среди всего этого...ковырять)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы