что такое канвас в юнити

Сanvas (Полотно)

Canvas (полотно) – это область, внутри которой находятся все элементы UI (пользовательского интерфейса). Полотно – это игровой объект (Game Object), с добавленным к нему компонентом Canvas. Все элементы UI должны быть дочерними этому Canvas.

Когда вы создаете новый элемент UI, такой как изображение (Image), используя меню GameObject > UI > Image, вместе с ним автоматически создается и Canvas, если до этого на сцене его еще не было. Элемент UI создается дочерним этому Canvas.

Область Canvas отображается в виде прямоугольника в окне Scene View. Это облегчает процесс расположения элементов UI без необходимости видеть игровое окно (Game View).

Canvas uses the EventSystem object to help the Messaging System.

Порядок отрисовки элементов

Элементы UI на Canvas появляются в том же порядке, в каком они расположены в иерархии. Первый дочерний элемент отрисовывается первым, второй – за ним и так далее. Если два элемента UI накладываются друг на друга, добавленный позднее будет поверх того, что был добавлен ранее.

Чтобы изменить то, какой элемент будет находится поверх остальных, просто поменяйте местами элементы в иерархии путем перетаскивания. Порядком также можно управлять при помощи скриптинга, используя следующие методы компонента Transform: SetAsFirstSibling, SetAsLastSibling и SetSiblingIndex.

Режимы отображения

У полотна есть параметр Render Mode, который определяет, где оно будет отображаться: в пространстве экрана (screen space) или игрового мира (world space).

Этот режим отображения помещает элементы интерфейса на экран поверх сцены. Если меняется размер экрана или его разрешение, полотно автоматически примет нужный размер вместе с ним.

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиUI in screen space overlay canvas

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиUI in screen space camera canvas

Пространство игрового мира (World Space)

При этом режиме отображения Canvas ведет себя также, как и любой другой объект на сцене. Размер Canvas может быть задан вручную при помощи Rect Transform, а элементы интерфейса будут отображаться перед или за другими объектами на сцене, в зависимости от их трехмерного расположения. Этот режим удобен для тех интерфейсов, которые предполагаются как часть игрового мира (diegetic interfaces).

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиUI in world space canvas

Источник

Холст (Canvas)

Компонент Canvas представляет собой абстрактное пространство, в котором производится настройка и отрисовка UI. Все UI-элементы должны быть потомками игровых объектов, к которым присоединен Canvas. Когда вы создаете UI-элемент из пункта меню ( GameObject > Create UI ), Canvas будет добавлен автоматически, если его нет в сцене.

Свойства

Подробности

Одного холста для всех UI-элементов вполне достаточно, но и несколько холстов в сцене допустимо. Также, возможно использование нескольких холстов, когда один выставляется дочерним элементом другого, для оптимизации. Вложенный холст использует тот же режим рендеринга (Render Mode), что и родитель.

В этом режиме холст масштабируется для заполнения всего экрана, а затем рисуется напрямую, не ссылаясь на сцену или камеру (интерфейс написуется даже если в сцене вообще нет камеры). Если размер или разрешение экрана меняются, интерфейс автоматически перемасштабируется. Интерфейс рисуется поверх любой другой графики, такой как вид из камеры.

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиИнтерфейс рисуемый поверх объектов сцены

В этом режиме, холст отображается как если бы он был нарисован на плоском объекте, на некотором расстоянии заданной камеры. Экранный размер интерфейса не меняется с расстоянием, т.к. он всегда масштабируется чтобы в точности заполнять пирамиду видимости камеры (camera frustum). Если размер или разрешение экрана, или пирамида видимости, изменяются – интерфейс автоматически перемасштабируется, чтобы помещаться. Любые 3д объекты сцены, расположенные ближе к камере, чем плоскость интерфейса, будут отрисованы “над” интерфейсов, в то время как остальные объекты, находящиеся за плоскостью, будут загорожены.

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиИнтерфейс в режиме Camera mode с объектами сцены спереди

World Space (пространство мира)

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиИнтерфейс в пространстве мира, пересекающийся с объектами сцены

Источник

Сanvas (Полотно)

Canvas (полотно) – это область, внутри которой находятся все элементы UI (пользовательского интерфейса). Полотно – это игровой объект (Game Object), с добавленным к нему компонентом Canvas. Все элементы UI должны быть дочерними этому Canvas.

Область Canvas отображается в виде прямоугольника в окне Scene View. Это облегчает процесс расположения элементов UI без необходимости видеть игровое окно (Game View).

Canvas uses the EventSystem object to help the Messaging System.

Порядок отрисовки элементов

Элементы UI на Canvas появляются в том же порядке, в каком они расположены в иерархии. Первый дочерний элемент отрисовывается первым, второй – за ним и так далее. Если два элемента UI накладываются друг на друга, добавленный позднее будет поверх того, что был добавлен ранее.

Чтобы изменить то, какой элемент будет находится поверх остальных, просто поменяйте местами элементы в иерархии путем перетаскивания. Порядком также можно управлять при помощи скриптинга, используя следующие методы компонента Transform: SetAsFirstSibling, SetAsLastSibling и SetSiblingIndex.

Режимы отображения

Этот режим отображения помещает элементы интерфейса на экран поверх сцены. Если меняется размер экрана или его разрешение, полотно автоматически примет нужный размер вместе с ним.

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиИнтерфейс на Canvas в пространстве экрана в режиме перекрытия

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиИнтерфейс на Canvas в пространстве экрана в режиме камеры

Пространство игрового мира (World Space)

При этом режиме отображения Canvas ведет себя также, как и любой другой объект на сцене. Размер Canvas может быть задан вручную при помощи Rect Transform, а элементы интерфейса будут отображаться перед или за другими объектами на сцене, в зависимости от их трехмерного расположения. Этот режим удобен для тех интерфейсов, которые предполагаются как часть игрового мира (diegetic interfaces).

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиИнтерфейс на Canvas в пространстве игрового мира

Источник

Организация интерфейса в Unity с UI Canvas

В Unity есть хорошая система для создания пользовательского интерфейса UI Canvas. По ней написано довольно много обучающего материала, но большинство гайдов рассказывает только о том, какие кнопки нажать и какой код написать, чтобы все заработало. В качестве примеров обычно приводится небольшой интерфейс состоящий из пары окон: главное меню, настройки. Однако в играх бывает гораздо больше окон и когда их становится уже хотя бы десяток, возникает необходимость какой-либо их организации. В рамках этой статьи я хочу рассказать как я решаю эту проблему.

Для начала нужно выделить отдельные окна в вашем интерфейсе. Под окном я подразумеваю панель с некоторыми контролами.

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнити

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнити

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнити

У каждого окна должен быть корневой объект, который будет содержать все контролы. Этот объект будет представлять окно как единое целое. Например есть панель на которой находятся элементы управления, логично сделать эти элементы дочерними по отношению к панели. К каждому окну прикрепляется компонент, котрый является наследником абстрактного класса Window.

Window

Window написан исходя из того, что у окон могут быть дочерние окна, т.е. те окна которые могут быть открыты из текущего окна при этом в один момент времени может быть открыто одно дочернее окно, а все остальные должны быть закрыты. С этой целью класс содержит свойство CurrentWindow в котором хранится ссылка на открытое на данный момент окно. А также есть событие OnOpen которое сообщает об открытии окна. Метод ChangeCurrentWindow() можно подписать на это событие у дочерних окон, чтобы в любой момент времени было открыто одно дочернее окно, он закрывает открытое дочернее окно и меняет ссылку на текущее открытое окно, ниже я приведу пример реализации. Также в классе есть методы SelfClose() и SelfOpen(), эти методы отвечают за то как будет открываться и закрываться окно. В методе Awake() происходит регистрация окна в UIManager, т.е. добавляется ссылка на окно.

UIManager

Далее перейдём к классу UIManager, он является sigleton-классом для того чтобы все окна могли к нему обращаться при необходимости. Как видно в нём есть список окон Windows, именно в нем хранятся ссылки на все окна на сцене. InitUI() нужен чтобы что-либо инициализировать, например, если вы хотите создавать окна из префабов, то здесь вы можете сделать их инстансы.
В методе Start() вы можете открыть окна которые должны быть открыты с самого начала или наоборот закрыть ненужные. Метод Get() позволяет получить ссылку на конкретное окно.

SettingsWindow

В качестве примера приведу свою реализацию окна настроек:

Из окна настроек я могу открыть 4 других окна, чтобы открыто было только одно окно, я подписываю метод ChangeCurrentWindow() окна настроек на события OnOpen дочерних окон, таким образом открытые окна закрываются, при открытии других. Реализации SelfOpen() и SelfClose() просто активируют или деактивируют окно.

Таким образом получается легко расширяемая система UI, нет необходимости вручную добавлять ссылки на окна в инспекторе или где-либо еще, чтобы добавить новое окно, нужно всего лишь создать соответствующий класс и унаследовать его от Window. У такой системы есть пара минусов, это то, что чем больше окон, тем больше классов необходимо будет создать и то, что поиск ссылки на окно происходит путем перебора массива ссылок, но на мой взгляд эти недостатки окупаются преимуществами.

Источник

Холст (Canvas)

Компонент Canvas представляет собой абстрактное пространство, в котором производится настройка и отрисовка UI. Все UI-элементы должны быть потомками игровых объектов, к которым присоединен Canvas. Когда вы создаете UI-элемент из пункта меню (GameObject > Create UI), Canvas будет добавлен автоматически, если его нет в сцене.

Свойства

Подробности

Одного холста для всех UI-элементов вполне достаточно, но и несколько холстов в сцене допустимо. Также, возможно использование нескольких холстов, когда один выставляется дочерним элементом другого, для оптимизации. Вложенный холст использует тот же режим рендеринга (Render Mode), что и родитель.

В этом режиме холст масштабируется для заполнения всего экрана, а затем рисуется напрямую, не ссылаясь на сцену или камеру (интерфейс написуется даже если в сцене вообще нет камеры). Если размер или разрешение экрана меняются, интерфейс автоматически перемасштабируется. Интерфейс рисуется поверх любой другой графики, такой как вид из камеры.

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиИнтерфейс рисуемый поверх объектов сцены

В этом режиме, холст отображается как если бы он был нарисован на плоском объекте, на некотором расстоянии заданной камеры. Экранный размер интерфейса не меняется с расстоянием, т.к. он всегда масштабируется чтобы в точности заполнять пирамиду видимости камеры (camera frustum). Если размер или разрешение экрана, или пирамида видимости, изменяются – интерфейс автоматически перемасштабируется, чтобы помещаться. Любые 3д объекты сцены, расположенные ближе к камере, чем плоскость интерфейса, будут отрисованы “над” интерфейсов, в то время как остальные объекты, находящиеся за плоскостью, будут загорожены.

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиИнтерфейс в режиме Camera mode с объектами сцены спереди

World Space (пространство мира)

что такое канвас в юнити. Смотреть фото что такое канвас в юнити. Смотреть картинку что такое канвас в юнити. Картинка про что такое канвас в юнити. Фото что такое канвас в юнитиИнтерфейс в пространстве мира, пересекающийся с объектами сцены

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *