Я пытаюсь сопоставить конец линии, нарисованной с помощью средства визуализации линий, с точкой в пространстве, которая находится всего в нескольких единицах от камеры и находится над объектом, который может быть очень далеко от камеры или очень близко. Когда я использую 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);