Работа с системой координат и игровым экраном в Unity 2d?

Итак, я разработал игры на других платформах, где система координат x/y имела смысл для меня. Верхний левый экран игрового экрана с координатами (0,0) и нижним правым был (ширина, высота). Теперь я пытаюсь сделать переход на Unity 2d, и я не могу понять, как работает экран игры. Если бы у меня был фоновый объект и объект символа на экране, когда я перемещаю персонаж вокруг его значений x и y, они варьируются от -3 до 3... очень маленькие координаты и не соответствуют разрешению игры, которое у меня установлено ( 1024x768). Есть ли хорошие учебники для понимания игровой сетки в Unity? Или кто-нибудь может объяснить, как я могу выполнить то, что я пытаюсь сделать?

Ответ 1

В Unity есть три системы координат: координаты экрана, координаты координат и мировые координаты.

Мировые координаты. Подумайте об абсолютном позиционировании объектов в вашей сцене, используя "точки". Вы можете выбрать, чтобы единицы отображали любую нужную длину, например 1 единица = 10 метров. То, что на самом деле отображается на экране, определяется тем, где находится камера и как она ориентирована.

Координаты просмотра. Координаты в окне просмотра данной камеры. Viewport - это воображаемый прямоугольник, через который просматривается мир. Эти координаты являются порпорными и варьируются от (0,0) до (1,1).

Координаты экрана: фактические координаты пикселей, обозначающие позицию на экране устройства.

Обратите внимание, что мировые координаты любого данного объекта всегда будут одинаковыми независимо от того, какая камера используется для просмотра, тогда как координаты вида зависят от используемой камеры. Координаты экрана дополнительно зависят от разрешения устройства и расположения камеры на экране.

Объект "Камера" предоставляет несколько методов для преобразования между этими различными системами координат, такими как "ScreenToViewportPoint", "ScreenToWorldPoint" и т.д.

Пример: поместите объект в верхнем левом углу экрана

    float distanceFromCamera = 10.0f;
    Vector3 pos = Camera.main.ScreenToWorldPoint (new Vector3 (0, Screen.height, distanceFromCamera));

    transform.position = pos;

Функция ScreenToWorldPoint принимает вектор Vector3 в качестве аргумента, где x и y обозначают положение пикселя на экране (0,0 слева внизу), а компонент z обозначает желаемое расстояние от камеры. Бесконечное количество трехмерных местоположений может отображаться на одну и ту же позицию экрана, поэтому вам необходимо предоставить это значение.

Просто убедитесь, что желаемое положение попадает в область отсечения камеры. Кроме того, вам может понадобиться выбрать подходящую точку поворота для вашего объекта в зависимости от того, какая часть вашего объекта вы хотите сосредоточить в левом верхнем углу.

Ответ 2

Использование:

Camera.main.WorldToScreenPoint(transform.position);

Позвольте мне преобразовать позицию Tranform в GameObjects в систему координат x и y.