Меню

Как настроить unity для работы

Начало работы в Unity: знакомство с интерфейсом

В данном уроке мы познакомимся с такой средой разработки, как Unity. Подробно разберем интерфейс Unity и поймем с чего нужно начинать разработку игр.

Сегодня Unity может похвастаться наибольшим развитием, чем любая другая игровая технология. Благодаря поддержке почти 30 платформ, в том числе мобильных, виртуальной реальности, настольных ПК и консолей, Unity — это не просто хороший вариант для старта, это идеальный вариант для старта!

Unity использует гибкую модульную систему для создания сцен и персонажей в игре. Даже если вы только начинаете, вы все равно можете сделать довольно крутой космический корабль с базовым набором лего-конструктора Unity.

Если же вы чувствуете, что готовы к «сложной изощренной кирпичной системе» для продвинутых, Unity дает вам возможность настроить практически любой компонент. Например, написать свои собственные шейдеры или переписать сетевые стеки в соответствии с потребностями вашей игры.

Это первое из серии учебных пособий по Unity, разработанных для того, чтобы помочь вам освоиться в этом игровом движке. В данном уроке мы разберем:

  • Как установить Unity, а также различия между тремя разными версиями
  • Что составляет интерфейс Unity
  • Навигацию внутри сцены
  • Добавление и управление объектами GameObject и их компонентами

Первая часть этого руководства посвящена ознакомлению с пользовательским интерфейсом Unity.

Во второй части урока мы будем использовать эти знания для создания своей первой игры — простой игры про полет космического корабля.

Этот туториал ориентирован на тех, у кого мало или вообще нет опыта работы в Unity. В идеале, у вас должен быть некоторый опыт программирования, но если нет, не переживайте — мы познакомимся со всем далее.

С чего начать?

Первым шагом этого урока является загрузка Unity. Но подождите — есть четыре разные версии. Какую из них выбрать?

Все версии Unity предоставляют одинаковые функции движка

  • Personal: бесплатно
  • Plus: $ 40 / мес
  • Pro: $ 150 / мес

Существует также версия Enterprise, в которой ваши пользовательские потребности определяют стоимость подписки.

Наиболее заметное различие между этими версиями заключается в том, что игры, созданные с помощью персональной версии, должны начинаться с заставки Unity, тогда как любая из платных версий позволяет либо удалить заставку, либо создать собственную.

Кроме того, существуют различные сервисы внутри Unity, такие как Cloud Build и Analytics, которые становятся доступными в платных версиях.В Unity есть несколько строгих правил о том, как вы можете использовать персональную версию. Перед тем, как приступить к работе, обязательно ознакомьтесь с FAQ по Unity, чтобы узнать, имеете ли вы право его использовать.

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

Запустите установщик и следуйте инструкциям на экране. Дождитесь завершения установки и запустите Unity Hub. Вам будет предложено создать учетную запись.

Создав учетную запись, запустите Unity. Нажмите File-New Project чтобы создать новый проект.

  • 1. Назовите свой проект Spaceship и выберите место на жестком диске, чтобы сохранить его.
  • 2. Вы заметите, что у вас есть несколько вариантов выбора шаблонов. Каждый шаблон предварительно настраивает Unity, чтобы сэкономить ваше время в зависимости от того, что вы хотите сделать. Сейчас выберите 3D.
  • 3. Нажмите Create, и Unity откроет ваш первый проект.

Переделываем интерфейс

Когда 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 из Иерархии, вы фактически удаляете его из сцены.

Читайте также:  Как настроить режим stp

По мере того, как ваша сцена разрастается большим количеством GameObjects, панель поиска окажется бесценным инструментом.

4. Окно проекта

Окно проекта (Project Window) содержит все ассеты, используемые вашей игрой. Вы можете организовать свои ассеты по папкам. Если вы хотите использовать их, вы можете просто перетащить их из окна проекта в окно иерархии.

Кроме того, вы можете перетащить их из окна проекта в окно сцены. Если вы перетащите файлы со своего компьютера в окно проекта, Unity автоматически импортирует их как ассеты.

Unity организует ассеты в окне проекта так же, как файловая система ОС.

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

5. Окно инспектора

Окно инспектора (Inspector Window) позволяет вам настроить любой GameObject. Когда вы выбираете GameObject в Иерархии, Инспектор перечисляет все компоненты GameObject и их свойства.

Например, свет будет иметь цветовое поле вместе с полем интенсивности. Вы также можете изменять значения ваших GameObjects во время игры.

6. Панель инструментов

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

Однако вы не сможете наглядно увидеть эффект в пустой сцене. Поэтому, сначала добавьте простой куб на сцену.

  • 1. Откройте раскрывающийся список GameObject из меню Unity
  • 2. Выберите раскрывающийся список 3D-объектов
  • 3. Выберите Cube из списка доступных объектов

Это даст вам визуальный ориентир, пока вы будете изучать параметры панели инструментов.

Выберите инструмент Рука (Hand) затем перетащите указатель мыши на окно сцены, чтобы панорамировать всю сцену.

Щелкните правой кнопкой мыши и перетащите мышь, чтобы повернуть камеру вокруг вашего текущего положения. Обратите внимание, что значок руки превращается в глаз.

Затем, удерживайте нажатой клавишу Ctrl (или Cmd) и Alt (или Option) . Щелкните правой кнопкой мыши и переместите мышь вверх, чтобы увеличить масштаб сцены.

Перемещение мыши вниз уменьшает масштаб. Или, если вы хотите сделать это простым способом, просто используйте колесо прокрутки.

Наконец, удерживайте правую кнопку мыши и используйте клавиши WASD для перемещения по сцене, как в шутере от первого лица.

Аналогично, вы можете перемещаться вверх и вниз, нажимая E или Q соответственно. Чтобы двигаться еще быстрее, нажмите и удерживайте клавишу Shift .

Инструмент Перемещение (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) пространством.

  • Глобальный режим: вы управляете своим объектом с точки зрения окружающего мира. Ось X движется слева направо, ось Y движется вверх и вниз, а ось Z движется вперед и назад, как обычно.
  • Локальный режим: работает из системы координат самого объекта и меняет оси в соответствии с осью реального GameObject.
Читайте также:  Как настроить теплые полы электрические теплолюкс с таймером

7. Кнопки воспроизведения

Кнопки воспроизведения (Play Buttons) позволяют запускать и останавливать игру. Первая кнопка — кнопка воспроизведения:

Несколько вещей происходят, когда вы нажимаете кнопку Play. Сначала ваша игра запустится, как и ожидалось. Набор кнопок также станет синим, чтобы показать, что игра находится в движении.

Интерфейс Unity затемнится, чтобы показать, что игра активна.

Далее следует кнопка Пауза:

Она позволяет сделать паузу и вносить изменения в игру.

Как и в режиме запущенной игры, эти изменения будут потеряны, как только вы остановите игру. Редактирование GameObjects во время игры и паузы — это система читинга и балансировки, которая позволяет вам экспериментировать с игрой, не опасаясь навсегда ее сломать.

Наконец, последняя кнопка Step:

Она позволяет вам шаг за шагом проходить игру. Это удобно, когда вы хотите наблюдать анимацию по кадрам, или когда вы хотите проверить состояние определенных GameObjects во время игры.

8. Разные настройки редактора

Данные элементы управления обрабатывают различные аспекты редактора. Первый — это раскрывающийся список Collab, который находится с правой стороны панели инструментов.

Это один из последних сервисов Unity, который помогает крупным командам без проблем сотрудничать в рамках одного проекта.

Следующая кнопка — кнопка Сервисы, где вы можете добавить дополнительные сервисы Unity в игру. Нажатие на кнопку предложит вам создать идентификатор проекта Unity.

Как только вы добавите идентификатор проекта, вы сможете добавить сервисы в ваш проект.

Например, вы можете добавить облачные сборки в ваш проект. Проект будет собираться автоматически, так что вам не придется ждать каждой сборки проекта.

Вы также можете добавить:

  • аналитику
  • внутриигровую рекламу
  • многопользовательская поддержку
  • покупку в приложении
  • отчеты о производительности
  • сотрудничество

А еще вы можете добавить членов команды в проект, установить возрастные ограничения и изменить некоторые важные настройки проекта.

Далее идет кнопка учетной записи. Она позволяет вам управлять своей учетной записью Unity — просматривать данные учетной записи, входить и выходить из системы, а также обновлять ее.

Четвертая кнопка — кнопка Слои (Layers).

Вы можете использовать слои для таких вещей, как предотвращение рендеринга GameObjects или исключение объекта из физических событий, таких как столкновения.

Последняя кнопка Макеты (Layouts) позволяет создавать и сохранять макеты в редакторе и переключаться между ними. Unity прекрасно настраивается. Каждый из различных окон в макете может быть изменен, закреплен, перемещен или даже полностью удален из редактора.

Данный урок затрагивает большинство инструментов, которые вы будете использовать при создании игр, но кроме них есть еще много других, с которыми мы познакомимся в следующих уроках.

Что делать дальше?

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

Если у вас есть вопросы по теме данного урока, присоединяйтесь к обсуждению ниже.

Источник



Просто о внутренних и внешних настройках для приложения в Unity3D

Введение

Здравствуйте уважаемые читатели, в сегодняшней статье хотелось бы поговорить о настройках и конфигурировании игровых приложений, создаваемых в среде Unity3d.

По традиции начну с предыстории. За время работы в игровой индустрии я разрабатывал различные проекты, с разной сложностью и побывал и в лагере гейм-дизайна, и в лагере программистов (где нахожусь и по сей день). Ни для кого не секрет, что любое приложение требует большого числа различных конфигурационных данных и настроек. В классическом, относительно Unity3d виде, такие настройки выносятся в видимую часть инспектора, где вводятся какие-то цифры и т.п. Я думаю, что говорить об удобстве такого подхода не стоит, это даже если исключить, факт, того, что на время настройки, сцена, в которой находится MonoBehaviour класс блокируется для изменений другими разработчиками. Поэтому после череды разного рода мытарств в прошлом, я решил, написать что-то простое и эффективное, что облегчит всем жизнь и упростит работу с такими данными, чем и хочу поделиться с вами.

Примечание: весь описанный ниже код применим к версии Unity 2018.3+ и использует компилятор Roslyn (версия языка C# 7+).

Внутренние настройки

Для начала рассмотрим внутренние настройки проекта, к которым относятся различные константы, ссылки, идентификаторы внешних SDK, ключи и т.п. вещи, включая глобальные и локальные настройки геймплея. В общем случае все такие данные можно разделить на четыре типа:

  • String
  • Int
  • Float
  • Bool

Все остальные данные можно легко уложить в них, а с учётом строки, хранить можно что угодно, используя JSON-сериализацию. Воспользуемся в качестве основы ScriptableObject, который подходит для решения этой задачи, как никто.

Итак, в базе, мы имеем массив значений, представляющих из себя:

  • Имя параметра
  • Тип параметра
  • Значения параметра в виде строки

Примечание: почему строки? Мне показалось это более удобным, чем хранить 4 переменные разных типов.

Инициализация выполняется в OnEnable. Почему не в Awake? Этот метод не вызывается для экземпляров, хранимых как ассет (вызывается он в момент CreateInstance, что нам не нужно). В момент запуска приложения для ассетов ScriptableObject вызывается сначала OnDisable (только в редакторе), затем OnEnable. Также, чтобы в редакторе при каждой перекомпиляции и открытии проекта не срабатывала инициализация, нужно добавить директивы предкомпиляции, а в начале файла вставить:

Метод GetValue понадобиться нам далее, а для внутренних настроек, он просто возвращает значение по умолчанию.

Читайте также:  Как настроить кратность прицела в танках

Метод GetParameterValue наш основной метод для доступа к параметрам. Здесь стоит учесть, что несмотря на unboxing значений, параметры хранимые в Setting это в некоем роде константы, поэтому их следует забирать при инициализации сцен. Не стоит вызывать метод в Update.

Мы написали основу и теперь нам нужен редактор, поскольку основной целью для нас было именно удобство для тех, кто работает с этими настройками.

Для добавления пункта меню с тем, чтобы иметь возможность создавать ассет можно использовать атрибут:

Вот так это будет выглядеть:

Пояснять код сильно не буду, здесь в целом все просто. Отмечу только, что редактор позволяет редактировать по выбору все ассеты типа Setting. Для этого при открытии окна мы находим их в проекте с помощью метода AssetDatabase.FindAssets(«t:<0>».Fmt(typeof(Setting).Name)). А также редактирование имени параметра сделано через кнопку для того, чтобы исключить его случайное изменение.

Вот так выглядит редактор:

Мы рассмотрели настройки, используемые внутри приложения, теперь рассмотрим более специфичный случай.

Внешние настройки

Представим себе ситуацию, что в уже запущенной игре, нам вдруг понадобилось изменить некие значения, чтобы скорректировать игровой процесс. В примитивном варианте, мы это изменяем в билде, накапливаем такие изменения, делаем обновление и отправляем в магазины, после чего ждем подтверждения и т.п. Но как бы с теми, кто не обновит приложение? И что, если изменения нужно внести срочно? Для решения этой задачи существует такой механизм как Remote Settings. Это не новое изобретение и используется во многих сторонних SDK для аналитики и т.п., например — это есть в Firebase, в GameAnalytics, а также в Unity Analytics. Именно последнее мы и будем использовать.

Примечание: в целом разницы между всеми этими системами нет, они схожи и используют одинаковые принципы.

Остановимся подробнее на том, что же такое Remote Settings в Unity Analytics и что он умеет.

Для того, чтобы данный функционал стал доступен в проекте, необходим включить аналитику в проекте на вкладке Services.

После этого необходимо зайти в свой аккаунт Unity3d и найти там свой проект и перейти по ссылке в раздел аналитики, где слева в меню выбираем пункт Remote Settings.

Все настройки разделяются на те, что используются в режиме разработки и те, которые будут использоваться в уже выпущенном приложении.

Для добавления параметра выбираем соответствующий пункт и вводим имя, тип и значение параметра.

После того, как мы добавили все нужные параметры, нам необходима поддержка в коде, для работы с ними.

Примечание: кнопка Sync осуществляет синхронизацию параметров с приложением. Этот процесс не происходит мгновенно, однако в момент, когда параметры в приложении обновятся, будут вызваны соответствующие события, о них мы поговорим позже.

Для работы с Remote Settings не требуется каких-либо дополнительных SDK, достаточно включить аналитику, о чем я писал выше.

Как видно мы переопределили метод GetValue и добавили новый метод, который позволяет получить список измененных параметров, он понадобиться нам позже.

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

Менеджер представлен в виде сиглетона, который живет только в сцене. Это сделано для простоты обращения к нему и для того, чтобы можно было легко управлять набором параметров в каждой сцене (исключить параметры, которые не требуются по логике).

Как видно у RemoteSettings есть три события:

  1. Событие, вызываемое перед тем, как будут получены значения параметров с удаленного сервера
  2. Событие обновления параметров (вызывается как раз по кнопке Sync, о которой мы писали ранее), а также в случае принудительного обновления параметров через функцию ForceUpdate
  3. Событие вызываемое, когда с сервера будут получены данные о удаленных настройках. Здесь также выдается код ответа сервера, в случае если произойдет какая-либо ошибка.

Примечание: в коде используется система событий, построенная на типах данных, подробнее о ней написано в другой моей статье.

Примечание: необходимо понимать, как работает RemoteSettings. На старте, если есть доступ в интернет, он автоматически скачивает данные о параметрах и кэширует их, поэтому при следующем запуске, если интернет отсутствуют, данные будут взяты из кэша. Исключение составляет ситуация, когда приложение изначально запускается с выключенным доступом в сеть, в этом случае, функции получения значения параметра вернут значение по умолчанию. В нашем случае — это те, которые мы вводим в редакторе.

Изменим теперь пример использования настроек из кода с учетом вышеописанного.

Как видим, из кода, разницы в работе между внутренними настройками и внешними нет, однако при необходимости, если того требует логика, можно подписаться на события менеджера, связанные с удаленными настройками.

Примечание: если нужны только удаленные параметры, то можно скачать специальный плагин из AssetStore, он позволяет работать с ними сразу.

Заключение

В данной статье я постарался показать, как можно просто конфигурировать приложение написанное на Unity3d используя, как внутренние настройки, так и удаленные. Аналогичный подход я использую в своих проектах, и он доказывает свою эффективность. Нам даже удалось, используя удаленные настройки реализовать свою систему A/B тестирования. Помимо этого, настройки повсеместно применяются для хранения различных констант связанных с SDK, с серверными вещами, а также с настройкой игрового процесса и т.п. Гейм-дизайнер может заранее создать набор параметров и описать как, и для чего, и где они используются, при этом он может настраивать игровой процесс не блокируя сцену. А за счет того, что мы использовали ScriptableObject и храним такие параметры как ассеты, их можно загружать через AssetBundle, что еще более расширяет нам возможности.

Источник