2d игра на unity. подробное руководство. часть 1

Алан-э-Дейл       12.02.2024 г.

Создание врагов

PrefabsEnemy(-20, 0, 0)

Двигаем врагов по дороге

C#MoveEnemyPrefabs\Enemy

Inspector

  1. Из массива точек маршрута мы получаем начальную и конечную позиции текущего сегмента маршрута.
  2. Вычисляем время, необходимое для прохождения всего расстояния с помощью формулы время = расстояние / скорость, а затем определяем текущее время на маршруте. С помощью , мы интерполируем текущую позицию врага между начальной и конечной точной сегмента.
  3. Проверяем, достиг ли враг . Если да, то обрабатываем два возможных сценария:
    1. Враг пока не дошёл до последней точки маршрута, поэтому увеличиваем значение и обновляем . Позже мы добавим код для поворота врага, чтобы он смотрел в направлении своего движения.
    2. Враг достиг последней точки маршрута, тогда мы уничтожаем его и запускаем звуковой эффект. Позже мы добавим код уменьшающий игрока.

RoadHierarchyC#SpawnEnemy

RoadHierarchySizeWaypoints6Waypoint0Element 0Waypoint1Element 1

Расширенные возможности

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

Создание графического интерфейса

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

Расширение редактора Unity

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

Анимация

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

Материалы и PBR

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

Добавление игрока

Внутри объекта Road нужно создать ещё один пустой объект и назвать его Player. Внутри него добавьте пустой объект Model и камеру. В Model нужно поместить модель машины, а затем установить камеру сзади модели.

Для объекта Player добавьте компонент Rigidbody и два коллайдера:

Один из коллайдеров нужно установить как триггер — с его помощью будут проверяться столкновения с разными объектами.

Теперь нужно заставить машину двигаться. Для этого создадим скрипт Moving и прикрепим его к объекту Player.

В первую очередь добавим переменные:

Теперь в Unity нужно заполнить все публичные переменные. Пустыми пока можно оставить Control и Broken Prefab, потому что они ещё не готовы.

Переменная Rb будет добавляться скриптом в методе Start():

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

Вернёмся к движению:

Можно запустить сцену и проверить, как движется машина. Камеру перед этим лучше сместить вбок, чтобы видеть, вращаются ли колёса.

Теперь нужно написать скрипт, который позволит управлять машиной. Назовём его Controls и добавим несколько переменных:

Само управление выглядит так:

Ссылку на скрипт нужно добавить в Moving:

Затем нужно добавить в метод Update() скрипта Moving следующий код:

Его надо вставить сразу после объявления переменных newSpeed и sideSpeed. Теперь машиной можно управлять:

Разметка и панели Unity

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

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

Чтобы держать все под рукой, советуем создать папки во вкладке Project (Проект). Эти папки будут созданы в папке Assets вашего проекта.

Внимание: папка Assets – это место, где хранится все, что вы добавляете во вкладке Project. Она может быть невидимой в Unity, в зависимости от выбранной разметки вкладки (одна или две колонки), но вы сможете увидеть ее, открыв приложение для экспорта файлов.. Вот пример структуры, которую мы используем в наших проектах

Вы можете адаптировать ее под свои предпочтения

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

Распространенные ошибки

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

Аврал за несколько дней до дедлайна 

Невозможно подтянуть производительность за несколько дней и даже недель до релиза, ведь иногда приходится полностью менять работу определенных систем. Игра не обязательно должна идти с 60 FPS на всех стадиях продакшена. Но не стоит оставлять огромный кусок работы и капитальные пересмотры архитектуры на последнюю неделю.

Отсутствие плана

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

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

Программисты порой оптимизируют отдельные куски кода — например, оптимизируют UI с помощью цикла foreach (с 10 мс до 3 мс). А художники рассчитывают полигоны. И то, и другое — улучшение, но зачастую эти действия не дают заметных результатов. Лучше сосредоточиться на опыте игрока, ведь в конечном итоге — это единственный важный результат.

Некорректные данные при включении GPU Profiler

Включение профайлера GPU покажет некорректные результаты для некоторых платформ, поэтому лучше отключить его. VSync будет использовать более 90% ресурсов системы, а такие вещи, как GPUProfiler.EndQueries, будут отображаться некорректно и при этом вызывать огромные нагрузки. Профайлер GPU поможет глубже разобраться в ситуации, но только когда точно знаешь, как он работает и зачем он включен.

Определить кто задерживает исполнение программы — GPU или CPU — можно, используя Timeline профайлера CPU:

  • Gfx.WaitForPresent: ограничения GPU, CPU ожидает ответа от GPU;

  • Gfx.WaitForCommands: ограничения CPU, GPU ожидает ответа от CPU.

«Сбор данных профайлера GPU может сильно перегружать систему.
Закройте эту графу, если эти данные вам не нужны», — я солидарен с Unity. 

Некорректные данные при запуске Deep Profiling

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

Использование кастомных маркеров профиля:

Некорректные данные из-за физики в FixedUpdate

Профилирование само по себе настолько загружает систему, что это может сильно повлиять на некоторые данные. Игра будет идти хуже, а значит, будет выполняться больше физики FixedUpdates. Даже если профайлер покажет, что на физику ушло 33% фреймрейта, по факту в итоговом билде это значение будет ближе к 10%. Так же как в случае с глубоким профилированием, эти некорректные данные могут сподвигнуть разработчиков заниматься оптимизацией не там, где это принесет значимый результат.

Сложности с сетевым решением

Программисты порой полагают, что сетевое решение (например, Photon) сильно снижает производительность. Они видят, что из-за него происходят пики загрузки ЦП, но забывают заглянуть поглубже в стек вызовов. Сетевой инструмент запускает методы, вызываемые из сети (так называемые RPC), а они — часть вашего собственного кода, которая не имеет к сети никакого отношения. В таких ситуациях нужно оптимизировать RPC-методы и/или распределить их рабочую нагрузку.

Шаг 3. Настройте свой проект

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

Для этого шага мы используем GraphicsGale, но вы можете использовать любой редактор, который вам нравится. Начните с того, что сделайте замену стен в игре. (Помните, вы всегда можете сделать больше позже.) Стены должны быть размером 100 на 100 пикселей.

Вот пример:

Сделайте что-нибудь быстрое и лёгкое, чтобы представить элементы нашей игры.

После завершения загрузки Unity вы можете открыть Unity Hub и начать новый проект. Назовите проект как хотите, но не забудьте выбрать 2D для настройки проекта.

Обязательно используйте 2D-шаблон.

Добро пожаловать в Unity! Теперь вы должны посмотреть на редактор Unity. Чтобы перемещаться по 2D-пространству в окне редактора, используйте среднюю кнопку мыши для панорамирования и колесо прокрутки для увеличения. Камера в центре поля представляет то, что увидит игрок.

В Unity есть невероятная функция под названием Unity Asset Store. Asset Store полон готовых фрагментов игры, таких как модели, текстуры, утилиты или программы AI. Они доступны для продажи, а некоторые даже предлагаются бесплатно. Из-за этого легко создать игру, не создавая слишком много ресурсов самостоятельно. Вы можете просто взять заранее запрограммированную игровую механику и прикрепить её к собственному арту.

Чтобы получить доступ к этим бесплатным базовым программным ресурсам, просто перейдите на вкладку «Asset Store» в верхней части окна просмотра. Отсюда перейдите в раздел «Лучшие бесплатные ресурсы» и загрузите пакет «Стандартные активы (для Unity 2017.3)». Возможно, вам придётся войти в систему или создать учётную запись.

Загрузите стандартные ресурсы из Unity Store.

После загрузки пакета нажмите «Импорт» (она заменяет кнопку загрузки после загрузки ресурсов), чтобы импортировать пакет в текущий проект Unity. Вам будет представлен длинный список флажков. Что вы добавляете из пакета, зависит от вас. Для этого руководства вам понадобятся только папка «2D» и папка «CrossPlatformInput» в разделе «стандартные ресурсы».

Вам также понадобятся некоторые инструменты для создания 2D-игр в Unity, которые вам немного помогут. Перейдите по этой ссылке и загрузите Git в виде zip-архива. Затем разархивируйте и перетащите папку внутри в обозревателя ресурсов. Возможно, вам придётся перезапустить Unity после этого, чтобы он работал правильно.

Теперь у вас должно быть всё необходимое для начала работы.

2016

Unity сохраняет за собой звание самого популярного движка для создания платформеров и повествовательных игр: в этом году появляется стильная Inside от авторов Limbo, выходит Oxenfree — очень атмосферная мистическая история о подростках. Российская компания Alawar делает Beholder — необычную стратегию, где вы, играя за управляющего многоквартирным домом, должны собирать компромат и писать доносы на жильцов.

Но одним из самых коммерчески успешных проектов года стал выход Superhot — необычного шутера, в котором время двигается только вместе с движением героя. Игру сделала небольшая команда из Польши. Поначалу это был прототип, созданный на гейм-джеме 7 Day FPS Challenge. Когда разработчики поняли, что их игрой интересуются, они запустили кампанию на Kickstarter и набрали нужную сумму за 24 часа. Кстати, сумма была относительно небольшой, всего $100 000.

Superhot — головоломка, которая при этом остаётся шутером

Кратко об игровом движке Unity

Unity Technologies выпустила Unity летом 2005 года. После этого события создание 2D-игр стало невероятно простым и быстрым. Сообществу было представлено три основных инструмента, способных сделать программу доступной для оформителей и разработчиков: Tilemap Editor, Timeline и Cinemachine. Редактор Tilemap был выпущен немного позднее и позволил программистам рисовать непосредственно в Unity.

Tilemap Editor дает возможность создавать обширные и сложные Tilemaps без использования сторонней программы. Редактор шкалы времени и Cinemachine были выпущены практически одновременно, хотя серьезные улучшения для Cinemachine были представлены сообществу позже.

Cinemachine — это набор камер, позволяющих создавать ролики. Инструмент демонстрирует, как камера отслеживает игровой объект, и предлагает лучший вариант. Редактор временной шкалы — инструмент, который позволяет пользователю создавать сценарии игровых объектов, подобных редактору фильмов. С помощью этих двух инструментов он может воссоздавать потрясающие композиции и написать любой код.

Прежде чем начать работать с движком Unity, пользователь должен пройти онлайн-обучение, чтобы понять его основы, навигацию по интерфейсу с использованием трех основных инструментов манипулирования: Translate, Rotate и Scale, научиться создавать префабы, добавлять и изменять компоненты внутри «Инспектора».

Для того чтобы творить с движком Unity 2d-игры, на пользовательском компьютере должны быть установлены Unity и некоторые 2D-приложения, такие как Ps, Gimp, SketchPad или MS Paint. Также разработчик должен хорошо разбираться в основах C #, таких как создание переменных, их изменение и вызов функций. Технические требования:

  • Компьютер с Windows 7 SP1 или выше либо macOS 10.12 Sierra и выше.
  • Доступ в интернет для загрузки бесплатной версии Unity.

Хотя Unity изначально имела бесплатную версию, но многие из опций, например помощь публикации для мобильных устройств, были доступны только в платной версии. С выходом Unity 5 ее философия изменилась, а ограничения увеличились. Бесплатных функций стало намного меньше, что существенно снижает ее преимущества.

Структура моноповедения

Ключевые функции

Все компоненты наследуются от класса MonoBehaviour. Он включает в себя несколько стандартных методов, главное:

  • void Start (), который вызывается всякий раз, когда объект, содержащий скрипт, создается в сцене. Это полезно в любое время, когда мы хотим выполнить некоторый код инициализации, например. установить экипировку игрока после того, как он появится в матче.
  • void Update (), который вызывается каждый кадр. Это то место, где будет выполняться основная часть кода, включающего пользовательский ввод, обновляющего различные свойства, такие как движение игрока в сцене.

Переменные инспектора

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

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

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

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

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

Принятие пользовательского ввода

Конечно, мы хотим, чтобы наша игра реагировала на ввод пользователя. Наиболее распространенные способы сделать это — использовать следующие методы в функции Update () компонента (или в любом другом месте, которое вам нравится):

  • Input.GetKey (KeyCode.W) Возвращает True W, удерживается клавиша W
  • Input.GetKeyDown (KeyCode.W) Возвращает True при первом нажатии клавиши W.
  • Input.GetAxis («Вертикальный»), Input.GetAxis («Горизонтальный») Возвращает значение между -1,1 перемещения мыши при вводе.

Шаг 6. Дорожная карта и сборка

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

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

Например, ваша дорожная карта может выглядеть примерно так:

  1. Добавить систему монет.
  2. Добавить здоровье и урон игрока.
  3. Основные враги.
  4. Проверка ошибок.
  5. Улучшить базовое искусство.
  6. Создавайте игровые сценарии и выигрывайте.
  7. Добавить элементы пользовательского интерфейса.
  8. Добавить систему меню.

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

Знать это расстояние важно, так как у вас не всегда есть неограниченное время и внимание, которые можно вложить в игру

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

От кого и для кого

Доброго времени суток! Меня зовут Николай, и я хочу рассказать свою историю и поделиться своим небольшим опытом в разработке своей первой игры. С чего начинал и какие трудности пришлось преодолеть на пути разработки. Статья ориентирована на тех, кто начинает, думает начать или уже разрабатывает свою первую игру. Зачем? Потому что на стадии разработки своей первой игры, сам не однократно читал статьи о подобном опыте, после прочтения которых «наматывал сопли на кулак» и продолжал разработку дальше. От идеи до выпуска в магазин.

Внимание! Статья получилось длинной, так что запаситесь чаем! Если не хочется долго читать, то выжимка из советов в концы статьи

Cities: Skylines

Cities: Skylines — градостроительный симулятор, разработанный студией Colossal Order, до этого известной по двум транспортным симуляторам Cities in Motion. Издателем выступила Paradox Interactive, специализирующаяся на глобальных стратегиях — например, Europa Universalis и Crusader Kings.

Игровой процесс Cities in Motion основан на строительстве и менеджменте транспортных сетей. Опыт разработки подобных симуляторов оказал влияние на Cities: Skylines. Colossal Order детально проработала системы проектирования дорог и городской трафик. Всё как в жизни: скажем, пробки — одна из главных трудностей виртуальных и реальных градостроителей.

PC: 85

PS4: 81

XONE: 81

Проектировщик городов строит свой город в Cities: Skylines

Разработчики создали сложную систему имитации передвижения горожан с учётом имеющихся дорог и общественного транспорта. Система определяет наиболее быстрый маршрут и позволяет с большой точностью анализировать эффективность городского транспорта. Cities: Skylines стала инструментом градопланирования.


Скриншоты: игра Cities: Skylines / Colossal Order
Скриншоты: игра Cities: Skylines / Colossal Order
Скриншоты: игра Cities: Skylines / Colossal Order

Игра открыта для модификаций — встроенный интерфейс API позволяет создавать моды на языке С#. Подробнее про моды мы писали в другом нашем материале.

«Разрабатывая инструменты для моддинга, мы хотели убедиться, что люди смогут использовать их полноценно. В итоге создатели модов вышли за рамки наших инструментов, делая то, что мы не могли себе представить. Смысл строительных игр заключается в раскрытии творческого потенциала людей — и мы это поддерживаем. Наша дорожная карта помогает моддерам планировать, что они смогут сделать в будущем. В финансовом плане игра действительно успешна, что даёт нам возможность работать с сообществом над улучшениями ещё активнее».

Мариина Халликайнен,CEO Colossal Order

За первые четыре года с момента релиза Cities: Skylines купили свыше шести миллионов игроков. К игре вышло 33 платных и бесплатных DLC. Команда Colossal Order энергично поддерживает сообщество — часть дополнительного контента разрабатывали его активные участники. Например, Content Creator Pack: Art Deco создал известный моддер Мэтт Shroomblaze Круз. Часть прибыли от продаж дополнения получает его создатель.

Геймдизайнер Каролина Корппо показывает созданные игроками города в Cities: Skylines

«С помощью Frame Debugger в Unity Editor мы быстро выявляем и устраняем проблемы с нашим рендерингом, построенным поверх пайплайна рендеринга Unity. Контроль над плагинами движка и дополнительными сборками помог нам навести порядок в структуре проекта, ведь с его помощью можно „пометить“ их платформу и архитектуру».

Дамьен Морелло, программист Cities: Skylines

обложка: официальный арт к игре Hollow Knight / Team Cherry

Общая информация о Unity

Beat Saber сделан на игровом движке Unity. В качестве языка разработки логики для игр в Unity используется C# — в таком контексте его часто называют скриптовым языком. C# — это язык, программы на котором собираются в сборки с управляемым кодом .NET (managed .NET assemblies) — dll-библиотеки, содержащие команды промежуточного языка (Common Intermediate Language, CIL или иногда просто IL). При этом ядро движка написано на C++, а часть его библиотек — те, которые связаны с игровой логикой и пользовательским интерфейсом — на C#. Это значит, что Unity нужен дополнительный скриптовый движок, который должен выполнять CIL-код и иметь возможность обмениваться данными с ядром. Для этого в Unity используется Mono.

Mono — это одна из реализаций спецификации общеязыковой инфраструктуры (Common Language Infrastructure, CLI). Mono работает на Windows, Linux, macOS, мобильных устройствах и игровых консолях. Разрабатывается с 2001 года компанией Ximian, которую в 2003 купила компания Novell, которую в 2011 купила Attachmate. Attachmate сократила почти всех, но разработчики Mono хотели и дальше разрабатывать Mono, поэтому организовали в том же году отдельную компанию Xamarin, которую в 2016 купили Microsoft. Код Mono открыт и хранится на GitHub.

Это стандартная практика в разработке игр, когда высокопроизводительная часть движка написана на C или C++, а игровая логика пишется на скриптовом языке, например Lua. Преимущество C# в качестве скриптового языка в том, что он достаточно “высокоуровневый”, чтобы упростить и ускорить разработку игры, но при этом позволяет использовать JIT-компиляцию в нативный код.

Подробнее об этом можно прочитать в документации Mono.

Программные моды для игр и программ (также известные как плагины) — это dll-файлы (в нашем случае .NET-сборки), которые добавляются к игре и загружаются в память вместе с ней. Проблема в том, что Beat Saber не поддерживает сторонние плагины и сам по себе ничего загружать не будет. За внедрение поддержки плагинов в игру отвечает BSIPA.

2015

Год во многом знаковый для отрасли. Кроме «рогалика» Sunless Sea и симулятора ядерного убежища Fallout Shelter от Bethesda, на Unity вышла партийная RPG Pillars of Eternity и платформер-метроидвания Ori and the Blind Forest.

Обе игры делались опытными, но независимыми командами. Pillars of Eternity — проект Obsidian, той самой студии, которая подарила миру Star Wars: Knights of the Old Republic II — The Sith Lords, Neverwinter Nights 2 и горячо любимый фанатами Fallout: New Vegas.


В визуальном стиле PoE легко узнаются RPG «старой школы», такие как Baldur’s Gate и Icewind Dale
Особенность геймплея — разветвленные системы диалогов, где каждое умение, характеристика или даже прошлое персонажа определяют варианты ответа и исход сцены

Помимо того, что PoE получилась действительно хорошей игрой, она запомнилась ещё и своими успехами в краудфандинге — целевую сумму в 1 миллион долларов студия получила уже на второй день кампании. Всего игра собрала 4 млн — это второе место среди видеоигр за всю историю Kickstarter. PoE продалась тиражом свыше 500 000 копий в год — это позволило студии окупить расходы и приступить к разработке второй части.


Визуальные эффекты сиквела Deadfire. Игра тоже сделана на Unity

Что до Ori and the Blind Forest, то это одна из самых красивых 2D-игр за последние лет десять: здесь есть вручную нарисованные фоны, в которых ни одна деталь не повторяется за всю игру, и потрясающая плавная анимация, и эффекты, а ещё эстетика, близкая по духу работам студии Ghibli («Принцесса Мононоке», «Унесённые призраками», «Мой сосед Тоторо»).

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

Ранний прототип Ori мы делали на Construct, над ним работало всего два человека. Когда же мы поняли, что хотим развить проект в полноценную игру, выбор, естественно, пал на Unity. Мы перенесли наш прототип на движок всего за неделю — и Ori сразу почувствовал себя как дома. Unity — мощный, расширяемый, интуитивно понятный и вместе с тем доступный инструмент для нашей маленькой команды. Мы хотим быть гибкой и независимой студией, и этот движок для такого — то, что надо.

Moon Studios

О Beat Saber

В качестве примера я буду использовать Beat Saber — одну из самых популярных игр для VR-шлемов. Если у вас есть такой шлем, то, скорее всего, вы уже знаете, что такое Beat Saber. Если нет, то, возможно, вы видели хотя бы одно видео из игры в рекомендациях Youtube.

Единственное, что Beat Saber поддерживает из модов — это пользовательские уровни. В игре есть официальный редактор, но нет никакого сервиса, чтобы как-либо распространять свои творения, и, по моему мнению, вряд ли появится. В основе практически любого уровня лежит какая-то песня

Разрешить выкладывать такие файлы в своем официальном сервисе — значит привлечь к себе внимание правообладателей с их постоянными запросами что-то удалить или вообще с требованиями закрыть весь сервис

Поэтому не удивительно, что вокруг Beat Saber сформировалось огромное сообщество: Beat Saber Modding Group (BSMG). Именно сообщество ответственно за большую часть того, что есть в игре.

  • beatsaver.com — коллекция пользовательских уровней, созданных с помощью официального или неофициальных редакторов. Сюда добавляются десятки уровней каждый день.
  • bsaber.com — сайт, главная задача которого — помочь найти что-то хорошее среди того, что появляется на beatsaver.com. Здесь есть рекомендации кураторов, топы за неделю, поиск по музыкальным жанрам и многое другое.
  • scoresaber.com — таблицы лидеров для пользовательских уровней.
  • modelsaber.com — модели мечей, платформ и аватаров. Тут хранится визуальный 3D-контент, не содержащий дополнительного кода.
  • beatmods.com — коллекция модов, модифицирующих код игры.
  • github.com/Assistant/ModAssistant — ModAssistant, программа для установки модов. Игрок просто выбирает моды, которые ему нужны, и жмет Install. Не нужно даже вручную копировать файлы.

Все это поддерживается сообществом. Большинство модов и даже сами сайты — это проекты с открытым исходным кодом, их можно найти на GitHub, чем я и воспользовался при подготовке к этой статье.

Изучение интерфейса Unity

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

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

Окно проекта (Project) показывает пользовательские библиотечные активы, которые доступны для использования, когда разработчик импортирует активы в свой проект.

Вид сцены (Scene View) позволяет разработчику осуществлять визуальную навигацию и редактирование. Он может отображать двухмерную или трехмерную перспективу, в зависимости от типа проекта, над которым работает.

Окно Иерархии (Hierarchy) представляет собой иерархическое представление текста для каждого объекта в сцене. Каждый элемент в сцене имеет запись в иерархии, так что два окна неразрывно связаны между собой. Иерархия структуры показывает, как объекты сгруппированы друг с другом.

Окно Инспектора (Inspector) позволяет просматривать и редактировать все свойства выбранного объекта. Так как объекты имеют различные свойства, макет (дизайн) и содержимое Окна Инспектора будут меняться.

Обнаружение столкновений

Ранее мы упоминали компоненты Collider и Rigidbody, которые можно добавить к объекту. Правило для столкновений состоит в том, что один объект в столкновении должен иметь твердое тело, а другой — коллайдер (или оба имеют оба компонента). Обратите внимание, что при использовании raycasting лучи будут взаимодействовать только с объектами, к которым прикреплены компоненты коллайдера. После настройки в любом настраиваемом компоненте, прикрепленном к объекту, мы можем использовать методы OnCollisionEnter, OnCollisionStay и OnCollisionExit для реагирования на коллизии. Получив информацию о столкновении, мы можем получить ответственность за GameObject и использовать то, что мы узнали ранее, для взаимодействия с прикрепленными к нему компонентами

После настройки в любом настраиваемом компоненте, прикрепленном к объекту, мы можем использовать методы OnCollisionEnter, OnCollisionStay и OnCollisionExit для реагирования на коллизии. Получив информацию о столкновении, мы можем получить ответственность за GameObject и использовать то, что мы узнали ранее, для взаимодействия с прикрепленными к нему компонентами.

Следует отметить, что твердые тела обеспечивают физику, такую ​​как гравитация, для объектов, поэтому, если вы хотите отключить это, вам нужно будет включить is_kinematic .

Установите флажок «Кинематика», чтобы отключить нежелательную физику, но сохранить хорошее обнаружение столкновений.

Гость форума
От: admin

Эта тема закрыта для публикации ответов.