Unity что такое сцена
Scenes
Scenes contain the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces.
A new empty Scene, with the default 3D objects: a Main Camera and a directional Light
When you create a new Unity project, your scene view displays a new Scene. This Scene is untitled and unsaved. The Scene is empty except for a Camera (called Main Camera) and a Light (called Directional Light).
To save the Scene you’re currently working on, choose File > Save Scene from the menu, or press Ctrl + S (Windows) or Cmd + S (masOS).
Unity saves Scenes as Assets in your project’s Assets folder. This means they appear in the Project window, with the rest of your Assets.
Saved Scene Assets visible in the Project window
To open a Scene in Unity, double-click the Scene Asset in the Project window. You must open a Scene in Unity to work on it.
If your current Scene contains unsaved changes, Unity asks you whether you want to save or discard the changes.
Multi-Scene editing
It is possible to have multiple Scenes open for editing at one time. For more information about this, see documentation on Multi-Scene editing.
Scenes
Scenes contain the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces.
A new empty Scene, with the default 3D objects: a Main Camera and a directional Light
When you create a new Unity project, your scene view displays a new Scene. This Scene is untitled and unsaved. The Scene is empty except for a Camera (called Main Camera) and a Light (called Directional Light).
To save the Scene you’re currently working on, choose File > Save Scene from the menu, or press Ctrl + S (Windows) or Cmd + S (masOS).
Unity saves Scenes as Assets in your project’s Assets folder. This means they appear in the Project window, with the rest of your Assets.
Saved Scene Assets visible in the Project window
To open a Scene in Unity, double-click the Scene Asset in the Project window. You must open a Scene in Unity to work on it.
If your current Scene contains unsaved changes, Unity asks you whether you want to save or discard the changes.
Multi-Scene editing
It is possible to have multiple Scenes open for editing at one time. For more information about this, see documentation on Multi-Scene editing.
Как мы переосмыслили работу со сценами в Unity
Unity, как движок, имеет ряд недостатков, но которые благодаря возможностям для кастомизации и инструментам для кодогенерации, можно решить.
Сейчас я вам расскажу о том, как мы написали плагин для Unity на основе пост-процессинга проектов и кодогенератора CodeDom.
Проблема
В Unity загрузка сцен происходит через строковой идентификатор. Он не стабильный, а это означает, что он легко изменяем без явных последствий. Например, при переименовании сцены всё полетит, а выяснится это только в самом конце на этапе выполнения.
Проблема обнаруживается быстро на часто используемых сценах, но может быть трудно обнаруживаемая, если речь идёт о небольших additive сценах или сценах, которые используются редко.
Решение
При добавлении сцены в проект, генерируется одноимённый класс с методом Load.
Если мы добавим сцену Menu, то в проекте сгенерируется класс Menu и в дальнейшем мы можем запустить сцену следующим образом:
По-хорошему, класс должен быть статическим, так как не предполагается создание экземпляра из него. Это ошибка, которую мы исправим. Как видно уже из этого фрагмента, кода мы цепляемся не к имени, а к GUID сцены, что является более надежным. Сам базовый класс выглядит вот так:
Теперь сцена может задекларировать список параметров, а вызывающий код должен передать для них аргументы.
Например, сцена Game хочет получить перечисление, содержащее всех игроков и при инициализации добавить для них аватаров.
В таком случае мы можем сами создать такой компонент.
После размещения его на сцене и последующим её сохранением, генератор добавит в класс сцены метода запуска сцены с обязательной передачей перечисления игроков.
В данный момент реализована возможность перегрузки обработчиков. Т.е. если на сцене будет N обработчиков с разными параметрами, под них создастся N методов запуска. Также не запрещается наличие нескольких компонентов-обработчиков с одинаковыми параметрами.
Это не фишка, а скорее недоработка, так как такой функционал быстрее создаст путаницу, нежели будет полезен.
А почему не сделать через N?
Первую версию плагина я осветил на своём YouTube канале в этом видео.
Там задали ряд вопросов и предложили альтернативные решения. Есть интересные подходы, которые имеют право на жизнь, а есть откровенно идиотские, которые я хочу разобрать.
Чем плох статический класс с полями, через которые передаются данные для сцены?
Нередко встречаю и такое. Речь идёт о классе по типу этого:
А уже внутри сцены, вероятно, будет группа компонентов, которая достаёт данные из свойств.
Основная проблема в том, что нет формализации: при загрузки сцены не совсем ясно, что нам нужно предоставить для корректной работы. Получателей в целом определить будет проще, так как мы можем воспользоваться поиском по ссылке.
Ну и опять же сцену придётся запускать по ID или имени.
Чем плох PlayerPerfs
Предлагали и такой экзотический вариант. Можно было бы начать с того, что PlayerPrefs вообще не предназначен для передачи значений внутри одного инстанса. Этим можно было бы и закончить, но продолжим критику тем, что вам также придётся работать с неформальными строковыми идентификаторами параметров.
Параллель с ASPNet
Мне хотелось получить что-то схожее с строго типизированными View из ASPNet Core. Мы считаем плохим тоном использовать ViewData и стараемся определять ViewModel. В Unity хочется что-то такого же толка с теми же преимуществами.
Но такой подход не очень распространён, к сожалению, и на это, я думаю, есть свои причины.
Где скачать
Плагин мы сделали в паре с Владиславом Койдо в рамках Proof-of-concept. Он ещё не стабилен и не обкатан как следует, но с ним уже можно поиграться.
Если вам интересно, я попрошу Владислава в следующей статье рассказать, как он работал с Code Dom в Unity и как работать с пост-процессингом на примере того, что мы сегодня обсуждали.
Начало работы в Unity: знакомство с интерфейсом
В данном уроке мы познакомимся с такой средой разработки, как Unity. Подробно разберем интерфейс Unity и поймем с чего нужно начинать разработку игр.
Сегодня Unity может похвастаться наибольшим развитием, чем любая другая игровая технология. Благодаря поддержке почти 30 платформ, в том числе мобильных, виртуальной реальности, настольных ПК и консолей, Unity — это не просто хороший вариант для старта, это идеальный вариант для старта!
Unity использует гибкую модульную систему для создания сцен и персонажей в игре. Даже если вы только начинаете, вы все равно можете сделать довольно крутой космический корабль с базовым набором лего-конструктора Unity.
Если же вы чувствуете, что готовы к «сложной изощренной кирпичной системе» для продвинутых, Unity дает вам возможность настроить практически любой компонент. Например, написать свои собственные шейдеры или переписать сетевые стеки в соответствии с потребностями вашей игры.
Это первое из серии учебных пособий по Unity, разработанных для того, чтобы помочь вам освоиться в этом игровом движке. В данном уроке мы разберем:
Первая часть этого руководства посвящена ознакомлению с пользовательским интерфейсом Unity.
Во второй части урока мы будем использовать эти знания для создания своей первой игры — простой игры про полет космического корабля.
Этот туториал ориентирован на тех, у кого мало или вообще нет опыта работы в Unity. В идеале, у вас должен быть некоторый опыт программирования, но если нет, не переживайте — мы познакомимся со всем далее.
С чего начать?
Первым шагом этого урока является загрузка Unity. Но подождите — есть четыре разные версии. Какую из них выбрать?
Все версии Unity предоставляют одинаковые функции движка
Существует также версия Enterprise, в которой ваши пользовательские потребности определяют стоимость подписки.
Наиболее заметное различие между этими версиями заключается в том, что игры, созданные с помощью персональной версии, должны начинаться с заставки Unity, тогда как любая из платных версий позволяет либо удалить заставку, либо создать собственную.
Кроме того, существуют различные сервисы внутри Unity, такие как Cloud Build и Analytics, которые становятся доступными в платных версиях.В Unity есть несколько строгих правил о том, как вы можете использовать персональную версию. Перед тем, как приступить к работе, обязательно ознакомьтесь с FAQ по Unity, чтобы узнать, имеете ли вы право его использовать.
Для выполнения этих уроков достаточно персональной версии, поэтому нажимаем на кнопку начать. Это приведет вас к странице загрузки, на которой нужно принять условия использования и загрузить установщик.
Запустите установщик и следуйте инструкциям на экране. Дождитесь завершения установки и запустите Unity Hub. Вам будет предложено создать учетную запись.
Создав учетную запись, запустите Unity. Нажмите File-New Project чтобы создать новый проект.
Переделываем интерфейс
Когда Unity впервые откроется, вы увидите окно, которое выглядит так:
Поначалу может показаться, что интерфейс немного перегружен. На самом деле, он обладает широкими возможностями настройки и может предоставить вам столько информации, сколько вам нужно.
В верхнем правом углу вы увидите пять кнопок. Выберите крайнюю справа. Это выбор макета (Layout). Из списка опций выберите 2 by 3.
Ваш редактор станет выглядеть так, как показано ниже:
Теперь разберем имеющиеся разделы.
1. Окно сцены
Окно сцены (Scene View) — это место, где вы строите свою игру. Здесь вы добавляете все модели, камеры и другие элементы, составляющие вашу игру. Это трехмерное окно, где вы можете визуально разместить все ассеты (assets), которые вы используете.
Когда вы тестируете свою игру, окно сцены будет обновляться с текущим состоянием игры. Вы даже можете добавлять новые элементы в сцену на лету.
Когда вы остановите игру, окно сцены вернется в исходное состояние. Любые изменения, внесенные в сцену во время игры, будут потеряны после ее остановки.
2. Окно игры
Окно игры (Game View) отображает игровую перспективу игрока. Здесь вы можете поиграть в свою игру и увидеть, как все различные механизмы работают друг с другом.
В окне игры имеется селектор соотношения сторон, который позволяет вам изменять размеры вида в соответствии с определенным соотношением сторон экрана (например, 4: 3, 16: 9, 16:10…) или размером экрана устройства, например это iPhone или iPad.
Это позволяет вам убедиться, что игра выглядит хорошо при всех соотношениях сторон и разрешениях, которые вы хотите поддерживать, и что важный контент не обрезается. Вы можете добавить пользовательское соотношение сторон, используя кнопку «Плюс» в нижней части раскрывающегося списка.
3. Окно иерархии
Окно иерархии (Hierarchy Window) содержит список всех текущих объектов (GameObjects), используемых в вашей игре. Но что такое GameObject? Простыми словами, GameObject — это объект в вашей игре.
GameObjects также могут действовать как папки, содержащие другие GameObjects, что делает их весьма полезными для организации вашей сцены. Вы увидите GameObjects в действии во второй части этого урока.
Сцена обычно представляет один уровень вашей игры, хотя теоретически вы можете поместить всю игру в одну сцену. Любые GameObjects, активно используемые в вашей игре в текущей сцене, появятся в окне Иерархии (Hierarchy).
Каждая новая сцена начинается с основной камеры и направленного света, которые оба являются объектами GameObject. Но вы всегда можете удалить их и добавить позже. Когда вы удаляете GameObject из Иерархии, вы фактически удаляете его из сцены.
По мере того, как ваша сцена разрастается большим количеством GameObjects, панель поиска окажется бесценным инструментом.
4. Окно проекта
Окно проекта (Project Window) содержит все ассеты, используемые вашей игрой. Вы можете организовать свои ассеты по папкам. Если вы хотите использовать их, вы можете просто перетащить их из окна проекта в окно иерархии.
Кроме того, вы можете перетащить их из окна проекта в окно сцены. Если вы перетащите файлы со своего компьютера в окно проекта, Unity автоматически импортирует их как ассеты.
Unity организует ассеты в окне проекта так же, как файловая система ОС.
Unity поддерживает метаданные для каждого ассета, поэтому перемещение ресурсов между папками в файловой системе нарушает метаданные. Если вам необходимо внести какие-либо организационные изменения в свои ассеты, особенно в префабы, всегда вносите эти изменения в окне проекта.
5. Окно инспектора
Окно инспектора (Inspector Window) позволяет вам настроить любой GameObject. Когда вы выбираете GameObject в Иерархии, Инспектор перечисляет все компоненты GameObject и их свойства.
Например, свет будет иметь цветовое поле вместе с полем интенсивности. Вы также можете изменять значения ваших GameObjects во время игры.
6. Панель инструментов
Панель инструментов используется для управления различными объектами GameObject в окне сцены. При разработке игры вы будете использовать следующие инструменты, поэтому ознакомьтесь с ними, попробовав их в своем пустом проекте.
Однако вы не сможете наглядно увидеть эффект в пустой сцене. Поэтому, сначала добавьте простой куб на сцену.
Это даст вам визуальный ориентир, пока вы будете изучать параметры панели инструментов.
Выберите инструмент Рука (Hand) затем перетащите указатель мыши на окно сцены, чтобы панорамировать всю сцену.
Щелкните правой кнопкой мыши и перетащите мышь, чтобы повернуть камеру вокруг вашего текущего положения. Обратите внимание, что значок руки превращается в глаз.
Перемещение мыши вниз уменьшает масштаб. Или, если вы хотите сделать это простым способом, просто используйте колесо прокрутки.
Наконец, удерживайте правую кнопку мыши и используйте клавиши WASD для перемещения по сцене, как в шутере от первого лица.
Инструмент Перемещение (Move) позволяет выбирать и размещать GameObject на сцене.
Когда вы выберете GameObject при активном инструменте Перемещение, в центре объекта появляются три цветные стрелки. Эти стрелки указывают трехмерные оси объекта: ось X — красная стрелка, ось Y — зеленая стрелка, а ось Z — синяя стрелка.
Эта группа из трех цветных стрелок в Unity называется gizmo. Gizmo — это трехмерная геометрия или текстура, которая предоставляет информацию об GameObject.
В нашем случае gizmo указывает направление каждой оси. На следующих уроках мы будем использовать gizmo, чтобы указывать такие вещи, как точки появления, расположение камер или даже направление ветра.
Есть много способов переместить ваш GameObject с помощью данного инструмента. Вы можете выбрать одну из стрелок (которая станет желтой при выборе), а затем переместить мышь. GameObject будет двигаться только по этой оси.
Три цветные плоскости в центре GameObject позволяют перемещать его по двум осям. Цвет квадрата указывает, по какой плоскости он будет двигаться. Например, зеленый квадрат означает, что вы можете перемещать объект по плоскости y (что означает, что он может перемещаться по осям x и z).
Клавиша быстрого доступа по умолчанию для инструмента перемещение W.
Инструмент Вращение (Rotate) позволяет, как вы уже догадались, вращать объекты.
При активации этого инструмента вы увидите три сферических цветных линии при выборе объекта для вращения. Эти линии указывают на вращающуюся ось. Просто выберите линию и перетащите мышь, чтобы повернуть GameObject. Чтобы свободно вращаться, не ограничиваясь осью, выберите пространство между линиями и наведите курсор мыши.
Клавиша быстрого доступа по умолчанию для инструмента вращение E.
Инструмент Масштаб (Scale) позволяет масштабировать объект GameObject либо по одной оси, либо пропорционально по всем осям.
Чтобы масштабировать объект вдоль оси, выберите его, а затем перетащите квадратный конец линии оси. GameObject будет масштабироваться вдоль этой оси. Чтобы масштабировать весь GameObject, выберите его центральную точку и перетащите мышь вперед или назад, чтобы масштабировать объект вверх или вниз соответственно.
Клавиша быстрого доступа по умолчанию для инструмента масштаб R.
Инструмент Rect в основном используется с 2D-объектами и пользовательским интерфейсом (UI), хотя его можно использовать и для 3D-объектов.
Инструмент может изменять размеры, масштабировать и вращать 2D-объекты, а также сбрасывать точку вращения, которая является центральной точкой вращения объекта. Опорная точка представлена большим кружком на объекте.
Клавиша быстрого доступа по умолчанию для инструмента Rect T.
Инструмент Преобразование (Transform) объединяет перемещение, масштабирование и вращение в один инструмент.
Первый переключатель переключается между центральным (center) и поворотным (pivot) режимами. В центральном режиме, если вы выберете два объекта GameObject, гизмо будет размещено в центре двух объектов. Вращение GameObjects вращает их вокруг центра гизмо. В режиме поворота каждый GameObject вращается вокруг своей точки поворота, как показано ниже:
Второй переключатель переключает между глобальным (global) и локальным (local) пространством.
7. Кнопки воспроизведения
Кнопки воспроизведения (Play Buttons) позволяют запускать и останавливать игру. Первая кнопка — кнопка воспроизведения:
Несколько вещей происходят, когда вы нажимаете кнопку Play. Сначала ваша игра запустится, как и ожидалось. Набор кнопок также станет синим, чтобы показать, что игра находится в движении.
Интерфейс Unity затемнится, чтобы показать, что игра активна.
Далее следует кнопка Пауза:
Она позволяет сделать паузу и вносить изменения в игру.
Как и в режиме запущенной игры, эти изменения будут потеряны, как только вы остановите игру. Редактирование GameObjects во время игры и паузы — это система читинга и балансировки, которая позволяет вам экспериментировать с игрой, не опасаясь навсегда ее сломать.
Наконец, последняя кнопка Step:
Она позволяет вам шаг за шагом проходить игру. Это удобно, когда вы хотите наблюдать анимацию по кадрам, или когда вы хотите проверить состояние определенных GameObjects во время игры.
8. Разные настройки редактора
Данные элементы управления обрабатывают различные аспекты редактора. Первый — это раскрывающийся список Collab, который находится с правой стороны панели инструментов.
Это один из последних сервисов Unity, который помогает крупным командам без проблем сотрудничать в рамках одного проекта.
Следующая кнопка — кнопка Сервисы, где вы можете добавить дополнительные сервисы Unity в игру. Нажатие на кнопку предложит вам создать идентификатор проекта Unity.
Как только вы добавите идентификатор проекта, вы сможете добавить сервисы в ваш проект.
Например, вы можете добавить облачные сборки в ваш проект. Проект будет собираться автоматически, так что вам не придется ждать каждой сборки проекта.
Вы также можете добавить:
А еще вы можете добавить членов команды в проект, установить возрастные ограничения и изменить некоторые важные настройки проекта.
Далее идет кнопка учетной записи. Она позволяет вам управлять своей учетной записью Unity — просматривать данные учетной записи, входить и выходить из системы, а также обновлять ее.
Четвертая кнопка — кнопка Слои (Layers).
Вы можете использовать слои для таких вещей, как предотвращение рендеринга GameObjects или исключение объекта из физических событий, таких как столкновения.
Последняя кнопка Макеты (Layouts) позволяет создавать и сохранять макеты в редакторе и переключаться между ними. Unity прекрасно настраивается. Каждый из различных окон в макете может быть изменен, закреплен, перемещен или даже полностью удален из редактора.
Данный урок затрагивает большинство инструментов, которые вы будете использовать при создании игр, но кроме них есть еще много других, с которыми мы познакомимся в следующих уроках.
Что делать дальше?
Мы прошли этот урок введения в интерфейс Unity. Во второй части этого руководства мы будем применять эти знания на практике при создании небольшого космического шутера. Вы узнаете, как создавать игры по принципам Unity, и получите более глубокое понимание различных инструментов и методов, которые вы можете использовать для создания своей собственной игры.
Если у вас есть вопросы по теме данного урока, присоединяйтесь к обсуждению ниже.