В чём разница между Screen Space и World Space?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между Screen Space и World Space в Unity
В Unity Screen Space и World Space — это два фундаментальных пространства координат, которые определяют, как позиционируются и отображаются объекты в сцене. Их понимание критически важно для корректной работы UI, рендеринга, взаимодействий и многих других аспектов разработки.
World Space (Мировое пространство)
World Space — это глобальная, абсолютная система координат всей сцены. Это пространство, в котором существуют все игровые объекты (GameObjects), физика и окружение.
- Координаты: Измеряются в мировых единицах (юнитах). Центр мира — точка (0, 0, 0).
- Назначение: Используется для всего, что является частью игрового мира: персонажей, зданий, источников света, камер.
- Преобразование: Координаты объекта в World Space остаются постоянными, независимо от того, как движется камера.
- Пример: Если куб находится в позиции
(5, 0, 10), он будет находиться там в мировом пространстве, пока его не переместят.
// Помещаем объект в конкретную точку мирового пространства
gameObject.transform.position = new Vector3(10f, 2f, -5f);
// Эта позиция фиксирована в мире
Screen Space (Экранное пространство)
Screen Space — это двумерная система координат, привязанная к пикселям экрана (или окна игры).
- Координаты: Измеряются в пикселях. Начало координат
(0, 0)по умолчанию находится в нижнем левом углу экрана.(Screen.width, Screen.height)— верхний правый угол. - Назначение: В первую очередь используется для пользовательского интерфейса (UI), рендеринга 2D-элементов поверх сцены, обработки ввода (например, позиции клика мыши или касания).
- Преобразование: Координаты в Screen Space напрямую зависят от разрешения экрана и позиции камеры. Объект, зафиксированный в Screen Space (например, UI-панель), будет всегда отображаться в одном и том же месте экрана, даже если камера движется.
- Пример: Текст "Здоровье: 100%" в верхнем левом углу экрана всегда будет там, куда бы ни смотрел игрок.
// Получаем позицию курсора мыши в экранных координатах
Vector3 mouseScreenPosition = Input.mousePosition;
// mouseScreenPosition.x от 0 до Screen.width, .y от 0 до Screen.height
// Преобразуем мировые координаты объекта в экранные (например, для отображения маркера над головой NPC)
Vector3 objectScreenPos = Camera.main.WorldToScreenPoint(enemyTransform.position);
Ключевые различия и практическое применение
| Аспект | World Space | Screen Space |
|---|---|---|
| Измерение | 3D (X, Y, Z) в юнитах | 2D (X, Y) в пикселях |
| Привязка | К виртуальному миру сцены | К пикселям экрана/окна игры |
| Зависимость от камеры | Нет. Объект существует независимо. | Прямая. Координаты рассчитываются относительно камеры. |
| Типичное использование | Игровые объекты, ландшафт, физика. | Элементы UI (Canvas в режиме Screen Space - Overlay/Camera), пост-обработка. |
| Пример в Unity UI | Canvas с режимом рендера World Space (например, интерфейс в мире, как дисплей в машине). | Canvas с режимом рендера Screen Space - Overlay (основной HUD). |
Преобразование между пространствами
Одна из самых частых задач — конвертация координат. Для этого используются методы основной камеры:
// Screen Space -> World Space (например, луч (Ray) из мыши в мир)
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit))
{
// hit.point - это Vector3 в World Space
Debug.Log("Попали в объект в мировой позиции: " + hit.point);
}
// World Space -> Screen Space (например, чтобы UI-элемент следовал за объектом в мире)
Vector3 screenPosForUI = Camera.main.WorldToScreenPoint(worldObject.transform.position);
uiMarkerRectTransform.position = screenPosForUI;
Важный нюанс для UI: При создании Canvas в Unity можно выбрать один из трех Render Mode, которые определяют его пространство:
- Screen Space - Overlay: Рендерится поверх всего, в чистом Screen Space, без привязки к камере.
- Screen Space - Camera: Рендерится в заданной плоскости перед камерой, но координаты все еще экранные.
- World Space: Canvas становится обычным 3D-объектом в World Space, который можно размещать в сцене.
Вывод: World Space — это пространство игры, а Screen Space — пространство отображения. Умение различать их и правильно преобразовывать координаты между ними — основа для создания интерактивного интерфейса, систем прицеливания, мини-карт и многих других игровых механик.