Как получить точку экрана объекта в трехмерном пространстве в Unity? - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь сопоставить конец линии, нарисованной с помощью средства визуализации линий, с точкой в ​​пространстве, которая находится всего в нескольких единицах от камеры и находится над объектом, который может быть очень далеко от камеры или очень близко. Когда я использую WorldToScreenPoint, я получаю результаты, которые мне непонятны. Установив позицию 0, я получаю непонятные результаты. Код является компонентом объекта, который я пытаюсь получить на экране. Любая помощь приветствуется.

foreach (int i in identifiers)
{
    GameObject lineHolder = new GameObject();
    lineHolder.transform.position = transform.position;
    lineHolder.transform.parent = transform;
    LineRenderer line = lineHolder.AddComponent<LineRenderer>();
    lineHolders.Add(lineHolder);
    line.positionCount = 2;
    line.SetPosition(0, Camera.main.WorldToScreenPoint(new Vector3(transform.position.x, transform.position.y, master.screenPoint.z)));
    line.widthMultiplier = .1f;
    line.SetPosition(1, master.controlPanel.controlElements[i].position);
}

Вот так я получаю «screenPoint» в «основном» коде, на который я ссылаюсь:

screenPoint = Camera.main.WorldToScreenPoint(controlPanel.transform.position);

Объект "controlPanel" находится в 5 единицах от камеры. Я стараюсь не рисовать линии под объектами на панели управления, которые являются просто объектами и не являются частью холста, но находятся на расстоянии 5 единиц от камеры.

Я перешел из точки экрана в точку мира. Вот исправленный код, который работает:

foreach (int i in identifiers)
                    {
                        GameObject lineHolder = new GameObject();
                        lineHolder.transform.position = transform.position;
                        lineHolder.transform.parent = transform;
                        LineRenderer line = lineHolder.AddComponent<LineRenderer>();
                        lineHolders.Add(lineHolder);
                        line.positionCount = 2;
                        Vector3 screenPoint = Camera.main.WorldToScreenPoint(transform.position);
                        line.SetPosition(0, Camera.main.ScreenToWorldPoint(new Vector3(screenPoint.x, screenPoint.y, master.controlPanel.transform.localPosition.z)));
                        line.widthMultiplier = .1f;
                        line.SetPosition(1, master.controlPanel.controlElements[i].position);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...