← Назад к вопросам

Что такое Canvas в Unity UI? Какие режимы рендеринга Canvas вы знаете?

1.7 Middle🔥 172 комментариев
#UI

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Canvas в Unity UI?

Canvas — это фундаментальный компонент системы пользовательского интерфейса (UI) в Unity. Он представляет собой корневой контейнер для всех UI элементов (таких как Image, Text, Button, Slider и других). Все GameObject-ы, являющиеся частью UI, должны быть потомками объекта Canvas в иерархии сцены. Именно Canvas отвечает за вычисление позиций, размеров и порядка отрисовки всех своих дочерних элементов и передает их данные в систему рендеринга.

Основные функции Canvas:

  • Объединение и управление UI элементами: Все UI компоненты собираются под Canvas, который управляет их трансформациями в мировом пространстве.
  • Обработка порядка отрисовки: Обеспечивает корректный порядок слоев (например, чтобы текст был виден над изображением).
  • Предоставление системы координат: Определяет пространство для позиционирования элементов (экранное или мировое).

Canvas автоматически создается при добавлении любого UI элемента на чистую сцену. Его можно также добавить явно через меню GameObject -> UI -> Canvas.

Режимы рендеринга Canvas

В компоненте Canvas есть критически важное свойство Render Mode. Оно определяет, как UI будет интегрироваться с трехмерной графикой игры. Существует три режима, выбор которого зависит от типа проекта и требуемого результата.

1. Screen Space - Overlay

Это наиболее распространенный и производительный режим для чисто 2D интерфейсов или UI, который должен всегда находиться "над" всей трехмерной графикой игры.

Ключевые особенности:

  • UI рендерится непосредственно на вершине всего отрисованного кадра, как если бы он был наложен на экран после рендеринга 3D мира.
  • Не зависит от камеры: UI будет отображаться даже если на сцене нет активной камеры.
  • Автоматически масштабируется под размер и разрешение игрового окна или экрана.
  • Позиции элементов задаются в пикселях относительно экрана.
// Пример: Установка режима Overlay через код (редко требуется)
Canvas canvas = GetComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;

Это режим идеален для меню, HUD (Health, Ammo), диалоговых окон в 2D/3D играх, где UI должен быть всегда виден и не взаимодействовать с 3D миром.

2. Screen Space - Camera

В этом режиме UI рендерится как если бы он находился в заданной плоскости на определенном расстоянии от камеры.

Ключевые особенности:

  • UI существует в пространстве данной камеры. Он будет отображаться только если эта камер активна и находится в поле ее видимости.
  • Можно задать расстояние плоскости (Plane Distance) от камеры, что влияет на порядок сортировки с 3D объектами.
  • UI масштабируется в соответствии с настройками камеры (например, Field of View). Это позволяет создавать эффекты, когда UI "принадлежит" миру (например, интерфейс внутри космического корабля).
  • Очень полезен для смешанных 2D/3D интерфейсов, где части UI должны находиться "внутри" мира или перекрываться 3D объектами специфическим образом.
// Пример: Назначение камеры для Canvas в этом режиме
Canvas canvas = GetComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceCamera;
canvas.worldCamera = Camera.main; // Указываем конкретную камеру

3. World Space

Это самый гибкий и полностью трехмерный режим. Canvas и все его элементы становятся обычными 3D объектами в мировом пространстве сцены.

Ключевые особенности:

  • UI элементы имеют трехмерные позиции, вращение и масштаб в мировых координатах.
  • Они могут взаимодействовать с 3D объектами, освещением и даже физикой (например, можно сделать UI элемент, который падает под действием гравитации).
  • Можно размещать UI внутри игрового мира: например, информационные табло на стенах, интерфейсы на поверхностях объектов, динамические 3D меню.
  • Требует ручной настройки масштаба и позиционирования, так как не адаптируется автоматически к размеру экрана.
// Пример: Превращение меню в трехмерный объект в мире
Canvas canvas = GetComponent<Canvas>();
canvas.renderMode = RenderMode.WorldSpace;
// Теперь можно трансформировать Canvas как любой GameObject
canvas.transform.position = new Vector3(10, 2, 5);
canvas.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f); // Часто требуется уменьшение масштаба

Практический совет по выбору режима: Для большинства стандартных интерфейсов (меню, HUD) используйте Screen Space - Overlay. Для интерфейсов, которые являются частью игрового мира (например, экран компьютера внутри игры), используйте Screen Space - Camera. Для полностью интерактивных 3D UI объектов, существующих в мире как физические предметы, выбирайте World Space. Правильный выбор режима напрямую влияет на визуальный результат, производительность и сложность реализации UI.

Что такое Canvas в Unity UI? Какие режимы рендеринга Canvas вы знаете? | PrepBro