Куда смотрят глаза
Был вопрос на форуме о том, как узнать, а куда смотрит игрок и как нарисовать линию в экранных координатах.
Я не нарисую отрезки в окне игры в экранных координатах, но могу отобразить точки одного отрезка для одного глаза 2д-панельками в экранных координатах (хотя визуально, у Unity экранные координаты связаны с 3д координатами по масштабу пикселя на метр на сцене). Для наглядности все же в окнах сцены будут отрезки в 3д-координатах.
using System.Collections; using System.Collections.Generic; using UnityEngine; // Вешаеться срипт на каждый глаз public class DrawForwardPath : MonoBehaviour { public float distance = 1f; public RectTransform _2dPoint1; public RectTransform _2dPoint2; void Update() { //Начальаня точка ("глаз") Vector3 position1 = transform.position; // transform.rotation возвращает кватернион // Vector3.forward возвращает Vector3(0f,0f,1f) // Конечная позиция = позиция глаза + Нормализация направления(кватернион глаза * ось "вперед") * дистанция Vector3 position2 = position1 + (transform.rotation * Vector3.forward).normalized * distance; // Белая линия, работает в сцене, но не на экране Debug.DrawLine(position1, position2); //Как пример, две 2д-панельки в виде окружностей показывают точки на экране начала и конца отрезка _2dPoint1.position = Camera.main.WorldToScreenPoint(position1); _2dPoint2.position = Camera.main.WorldToScreenPoint(position2); } }
Чтобы посмотреть функции операторов такие как умножение, сложение и свойства normalized, и переписать код на C++ можно декомплировать .net библиотеку C:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll через ILSpay. Например, там есть расчеты умножения кватерниона (X,Y,Z,W) на эйлеровы углы (X,Y,Z), нормализация, сложение. Библиотеку это можно взять из Unity игр или установив движок Unity.
Адреса позиции и углов обычно находятся рядом друг с другом.
0 Комментариев
Рекомендуемые комментарии
Комментариев нет
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти