Как сделать радиопередачу из сферы в элемент пользовательского интерфейса на холсте - PullRequest
0 голосов
/ 07 февраля 2020

Я бы хотел, чтобы Raycast из центра Sphere GameObject нашел элемент текста / изображения, попадающий под луч. Я использую Physics.RaycastAll для обнаружения попадания элемента пользовательского интерфейса. Ниже приведен мой код.

public class RaycastUI : MonoBehaviour
{

    public GameObject Sphere;

    private Vector3 _origin;
    private Vector3 _direction;

    void Update()
    {
        RaycastHit[] hits;

        // get the origin and direction
        _origin = Sphere.transform.position;
        _direction = Sphere.transform.forward;

        //raycast all
        hits = Physics.RaycastAll(_origin, _direction, 100.0F);

        // retrieve the names of the element that are hit by the sphere.
        for (int i = 0; i < hits.Length; i++) {
            RaycastHit hit  = hits[i];
            Debug.Log(hit.collider.name);
        }
    }
}

Я добавил BoxCoilloider на холст. К сожалению, hits.Length всегда возвращает 0. Я что-то упустил? Как выполнить отлив лучей из сферы к элементу пользовательского интерфейса на холсте, чтобы проверить, не столкнулся ли он?

1 Ответ

0 голосов
/ 07 февраля 2020

Я думаю, что вы должны использовать EventSystem, если хотите проверять элементы пользовательского интерфейса.

Попробуйте что-то вроде этого:

private void GetUIObjectsOfPosition(Vector2 screenPosition)
{
    var eventDataCurrentPosition = new PointerEventData(EventSystem.current);
    eventDataCurrentPosition.position = screenPosition;

    var results = new List<RaycastResult>();
    EventSystem.current.RaycastAll(eventDataCurrentPosition, results);

    foreach (var result in results) {
        Debug.Log(result.gameObject.name);
    }               
}

Вы можете рассчитать положение экрана по мировое положение сфер с помощью Camera.WorldToScreenPoint .

...