Это всё

Экран Game Over

Игра должна завершаться, когда счетчик движений достигает 0. Откройте GUIManager.cs и добавьте следующий if оператор в MoveCounters под moveCounter = value;:

if (moveCounter <= 0) {
moveCounter = 0;
GameOver();
}

GameOver() появляется после финального движения, и чтобы комбинации добавлялись к финальному счету, понадобится создать сопрограмму, которая бы ждала, пока BoardManager.cs не завершит все перемещения. Затем можно вызвать GameOver().

Добавьте следующую сопрограмму в GUIManager.cs ниже метода GameOver():

private IEnumerator WaitForShifting() {
yield return new WaitUntil(()=> !BoardManager.instance.IsShifting);
yield return new WaitForSeconds(.25f);
GameOver();
}

Теперь замените следующую линию в MoveCounter:

GameOver();

на:

StartCoroutine(WaitForShifting());

Так все комбинации будут учтены до завершения игры.

Сохраните скрипты, запустите игру и подсчитывайте комбинации:

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

Создание проекта

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

Новому проекту присваивается имя, выбираются место хранения на диске и темплейт — то есть шаблон для разработки, внешний вид и функционал которого зависит от количества измерений в игре. Проще начинать с 2D-проектов, так как для этого формата создано больше готовых ассетов. Конечно, можно сразу начать делать 3D-игры, но в этом случае многие элементы и анимации придется самостоятельно создавать с нуля или выделять бюджет на то, чтобы делегировать эту часть работы другим специалистам.

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

Смежные вопросы

Сокращение используемых объемов памяти и исправление OOM-сбоев

Работая над производительностью игры, вы столкнетесь со сбоями Out Of Memory или медленной загрузкой из-за неоптимизированного использования ресурсов. Хотя память не обязательно напрямую влияет на производительность, она все-таки важна. Оптимизацию использования памяти лучше всего проводить при подготовке оптимизационных билдов. Используйте Memory Profiler, чтобы точно определять занимаемые объемы. Совет: велика вероятность, что шейдеры съедают 50% памяти, тут стоит глубже погрузиться в правильное ограничение ключевых слов шейдера (на эту тему стоит написать отдельную статью).

Window > Analysis > Memory Profiler 

Настройка триггеров

Для понимания сути триггеров важно усвоить, что такое коллайдер (Collider). Это компонент, который присваивается объекту в пространстве игры, задает форму и делает его твердым, недоступным для прохождения сквозь него

Например, если мы разместим монетку в 2D-пространстве и захотим сделать так, чтобы она упала на платформу, то без использования компонента Collider ничего не получится — монетка пролетит сквозь платформу.

Поэтому обоим объектам необходимо присвоить компонент Box Collider 2D — это тонкая зеленая линия, которая обводит элементы по контуру, и за счет этой рамки они становятся твердыми, то есть один не может пройти сквозь другой.

Так объекты обязательно соприкоснутся и монета встанет на платформу.

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

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

Триггеры распознают три варианта взаимодействия области на карте и объекта:

  • OnTriggerEnter — объект зашел в зону;
  • OnTriggerStay — объект находится в зоне;
  • OnTriggerExit — объект покинул зону.

Skill Factory

Профессия «Разработчик игр на Unity»
Научитесь разрабатывать игры на Unity и C#

Все главные навыки разработчика игр в одном курсе:

  • Программирование
    Вы научитесь программировать на C# — это даст вам основу для широкого круга задач
  • Все этапы гейм-дизайна
    Вы отработаете каждый шаг создания игры — от идеи до загрузки в сторы и продаж
  • Разные виды игр
    Вы освоите разработку востребованных 2D- и многопользовательских 3D-игр
  • Выпуск на рынок
    Вы поймете, как зарабатывать на играх, продвигая их в App Store, Google Play, Steam

Программа профессии

Введение в GameDev и Программирование на C# (2 месяца)Результат: Создаете игровую сцену (локацию) с нуля с освещением и интерактивом. Научитесь основам языка C#, решите 50+ практических задач.

Разработка мобильных игр на Unity (3 месяца)Результат: Разработаете Space Shooter, который будет работать на мобильных устройствах Android и IOS и будет загружен в Google Play и Apple Store. Научитесь создавать мобильные 2D-игры и разработаете RPG Tower defence с несколькими уровнями. Научитесь сохранять игру и продолжать ее с сохраненного места.

Создание 3D-shooter и «Танки» (4 месяца)Результат: Разработаете 3D Shooter, который загружен в Steam. Разработаете многопользовательскую 3D игру по типу “танки», где вы будете сражаться с другими игроками по сети, а также сможете общаться с ними по голосовой связи.

Командная или инди-разработка своей игры (3 месяца)Результат: Познакомитесь с процессом проектирования новой игры. Жанр игры вы выберете самостоятельно, например action adventure, RPG, гонки и т.д. Узнаете об основных подходах, которые позволяют придумать игру, которая будет пользоваться спросом. Разработаете дизайн-документ для вашей будущей игры, подробно описывающий игру. Также вы научитесь основным подходам для продвижения и заработка на играх. Разработаете игру, которую вы самостоятельно спроектировали на предыдущем блоке по геймдизайну. Разработку можно вести индивидуально или в команде. Разработка будет вестись под руководством опытного эксперта. Ваша задача — выпустить игру и вывести ее на рынок (в Steam, Google Play и/или Apple Store).

Повышаем уровень монстров

Какой милаха! Но если вы попробуете украсть его печенье, этот монстр превратится в убийцу.Project BrowserPrefabs/MonsterC#MonsterDataвыше

Задание уровней монстров

Изобретать велосипед заново — обычно плохая идея.MonsterData.cs

Prefabs/MonsterProject BrowserInspectorLevelsMonsterData (Script)size3
стоимость

  • Element 0: 200
  • Element 1: 110
  • Element 2: 120

Prefabs/MonsterMonster0visualizationElement 0Element 1Monster1Element 2Monster2
Prefabs/Monster

Задание текущего уровня

MonsterData.cs

  1. Задаём свойство частной переменной . Задав свойство, мы сможем вызывать её как любую другую переменную: или как (внутри класса) или как (за его пределами). Мы можем определить в методе геттера или сеттера свойства любое поведение, а создавая только геттер, сеттер или их обоих, можно управлять характеристиками свойства: только для чтения, только для записи и для записи/чтения.
  2. В геттере мы возвращаем значение .
  3. В сеттере мы присваиваем новое значение. Затем мы получаем индекс текущего уровня. Наконец, мы проходим в цикле по всем уровням и включаем/отключаем визуальное отображение в зависимости от . Это отлично, потому что при изменении спрайт обновляется автоматически. Свойства — это очень удобная штука!

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

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

Но как найти соседние элементы?

Откройте Tile.cs и добавьте следующий метод внизу метода SwapSprite:

private GameObject GetAdjacent(Vector2 castDir) {
RaycastHit2D hit = Physics2D.Raycast(transform.position, castDir);
if (hit.collider != null) {
return hit.collider.gameObject;
}
return null;
}

Этот метод вернет соседний элемент за счет отправки raycast в castDir. Если элемент обнаружится в этом направлении, верните его GameObject.

Добавьте следующий метод ниже метода GetAdjacent:

private List<GameObject> GetAllAdjacentTiles() {
List<GameObject> adjacentTiles = new List<GameObject>();
for (int i = 0; i < adjacentDirections.Length; i++) {
adjacentTiles.Add(GetAdjacent(adjacentDirections));
}
return adjacentTiles;
}

В этом методе используется GetAdjacent() для генерации списка элементов, окружающих текущий элемент.

Новый метод, который вы только что создали, позволяет элементам меняться только с соседними.

Замените текущий код в методе OnMouseDown:

else {
SwapSprite(previousSelected.render);
previousSelected.Deselect();
}

этим:

else {
if (GetAllAdjacentTiles().Contains(previousSelected.gameObject)) { // 1
SwapSprite(previousSelected.render); // 2
previousSelected.Deselect();
} else { // 3
previousSelected.GetComponent<Tile>().Deselect();
Select();
}
}

  1. Вызовите GetAllAdjacentTiles и проверьте, есть ли гейм-объект previousSelected в новом списке соседних элементов.
  2. Замените спрайт элемента.
  3. Элемент не находится рядом по отношению к ранее выбранному, отмените выбор предыдущего и выберите вместо этого новый.

Сохраните скрипт и вернитесь в редактор Unity.

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

Своппинг тайлов

Начните с открытия файла Tile.cs и добавления следующего метода сразу под методом :

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

  1. Устанавливается SpriteRenderer с именем в качестве параметра, который будет использоваться вместе с для обмена спрайтами.
  2. Проверяется с SpriteRenderer текущего тайла. Если они одинаковые, то ничего не делать, так как обмен местами двух одинаковых спрайтов не будет иметь смысла.
  3. Создается для хранения спрайта .
  4. Происходит обмен второго спрайта установкой его на место первого.
  5. Первый спрайт заменяется на второй также (который был назначен в ).
  6. Воспроизведение звукового эффекта.

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

Добавьте эту строчку над в операторе else метода

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

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

Шаг 2. Получите инструменты

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

Начните с загрузки Unity Hub. Затем откройте концентратор, выберите «Установить» и нажмите «Добавить». В этом руководстве будет использоваться версия Unity 2019.2.14f1. Вы можете установить любые пакеты, которые хотите или для которых есть место. В этом руководстве игра будет запущена в Windows, поэтому убедитесь, что установлен флажок «Поддержка сборки Windows».

Мы используем Unity версии 2019.2.14f1

Вы также можете создавать графику для своей игры. Поскольку Unity использует пиксельную графику , я настоятельно рекомендую использовать GraphicsGale . GraphicsGale бесплатна, проста в использовании и обладает множеством функций. Однако вы можете свободно использовать любой удобный вам редактор, будь то Photoshop, Blender или Windows Paint.

Общая информация о 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.

Шаг 4. Создайте карту

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

Вы также захотите добавить свою иллюстрацию-заполнитель в браузер ресурсов. Просто перетащите всю папку из окон в обозревателя ресурсов.

Затем создайте палитру, которая будет служить блоками для вашего персонажа. Перейдите в Window> 2D> Tile Palette, чтобы открыть окно Tile Palette. Щёлкните «Создать новую палитру», чтобы создать новую палитру плиток. Назовите его «solid», но оставьте все значения по умолчанию и сохраните его в папке «Tiles».

Ваша новая палитра плитки, там ещё ничего нет.

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

Затем создайте что-нибудь для рисования с помощью палитры. В окне Hierarchy щёлкните правой кнопкой мыши и выберите 2D Object> Tilemap.

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

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

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

Чтобы добавить физическое свойство, щёлкните карту тайлов в редакторе, а затем прокрутите вниз в окне инспектора (с другой стороны). Нажмите кнопку «Добавить компонент».

Компонент, который вам нужно добавить, называется Tilemap Collider 2D. Просто воспользуйтесь окном поиска, чтобы найти его и добавить на карту листов.

Управление игровыми объектами

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

  • Перевод, вращение, масштаб
  • Создать новые GameObjects
  • Отправка сообщений существующим GameObject / компонентам

Трансформации

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

Вышеупомянутые методы довольно понятны , просто обратите внимание, что мы используем gameObject в нижнем регистре для ссылки на GameObject, которому принадлежит этот конкретный экземпляр компонента. В общем, рекомендуется использовать локальное , а не глобальное положение / поворот объекта. Обычно это упрощает перемещение объектов разумным образом, поскольку ось локального пространства будет ориентирована и центрирована на родительском объекте, а не на мировом начале координат и направлениях x, y, z

В общем, рекомендуется использовать локальное , а не глобальное положение / поворот объекта. Обычно это упрощает перемещение объектов разумным образом, поскольку ось локального пространства будет ориентирована и центрирована на родительском объекте, а не на мировом начале координат и направлениях x, y, z.

Преимущества локального пространства станут немного более очевидными с диаграммой!

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

Как вы понимаете, за этим стоит довольно простая линейная алгебра, на которую намекает «Обратный» в имени метода.

Создание новых игровых объектов

Поскольку GameObjects — это в основном все в вашей сцене, вы можете иметь возможность генерировать их на лету. Например, если у вашего игрока есть какая-то пусковая установка для снарядов, вы можете захотеть создавать снаряды на лету, у которых есть собственная инкапсулированная логика для полета, нанесения урона и т. Д.

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

Как выглядит префаб на вкладке Asset

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

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

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

Затем мы можем выполнить «создание экземпляра» префаба и манипулировать им в желаемом месте сцены и установить необходимые родительские отношения.

Размещаем монстров

PrefabMonsterПрефаб Monster готов к использованиюAudio SourceMonsterOpenspotProject BrowserPrefabsOpenspotInspectorAdd ComponentNew ScriptPlaceMonsterC SharpCreate and Addпрефабу

По одному монстру на точку

  1. Unity автоматически вызывает , когда игрок касается физического коллайдера GameObject.
  2. При вызове этот метод ставит монстра, если возвращает .
  3. Мы создаём монстра с помощью метода , который создаёт экземпляр заданного префаба с указанной позицией и поворотом. В данном случае мы копируем , задаём ему текущую позицию GameObject и отсутствие поворота, передаём результат в и сохраняем его в
  4. В конце мы вызываем для воспроизведения звукового эффекта, прикреплённого к компоненту объекта.

Что такое Unity

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

Наглядный пример игры, созданной на Unity, которая поддерживает разные устройства, — , успешный мультиплатформенный проект китайской студии miHoYo Limited. Более популярной стала ее мобильная версия, но пользователи могут войти в аккаунт, например, с компьютера и продолжить играть с того же момента, на котором остановились в мобильной версии. Кроме Genshin Impact, на Unity созданы такие известные проекты, как Hearthstone, Outlast, Cuphead, Pokemon GO и многие другие.

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

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

Сколько зарабатывает юнити разработчик

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

Источник Минимальная зарплата Максимальная зарплата
workius.ru 30 000 руб. 200 000 руб.
hh.ru 23 000 руб. 250 000 руб.
russia.trud 63 500  руб. 100 000 руб.

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

Unity Junior Developer — Требования к кандидатам

Разработка в самом разгаре

Далее я начал разрабатывать инвентарь и его «дизайн». Первые наброски, были выполнены из стандартных плашек и кнопок.

Одна из первых версий инвентаря

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

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

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

Hollow Knight

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

Первые концепты 2D-платформера Hollow Knight появились на геймджеме Ludum Dare 27. Австралийские разработчики — Ари Гибсон и Уильям Пеллен — стали развивать свои идеи, зародившиеся на хакатоне, и запустили кампанию на Kickstarter. Собрав 57 тысяч долларов, они основали студию Team Cherry.

PC: 87

PS4: 85

XONE: 90

NS: 90


Скриншот: игра Hollow Knight / Team Cherry

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

«Мы не задумывались о жанре нашей игры, не хотели загонять себя в жанровые рамки. Некоторые механики были взяты из Metroid и Mega Man, система амулетов — из Paper Mario. Мы не слишком беспокоились о том, чтобы Hollow Knight была именно метроидванией, просто пытались создать захватывающее приключение. Мы наполняли мир интересными персонажами в непривычном сеттинге, добавляли точки интереса и связи, сюрпризы и неожиданные события».

Ари Гибсон,создатель Hollow Knight

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


Скриншоты: игра Hollow Knight / Team Cherry
Скриншоты: игра Hollow Knight / Team Cherry
Скриншоты: игра Hollow Knight / Team Cherry

Минималистичная графика, мрачный и готичный арт-дизайн Hollow Knight напоминают, что красивые игры не обязательно должны быть нацелены на грандиозные технические достижения.

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

Уильям Пеллен,создатель Hollow Knight

Team Cherry создала отличительный визуальный стиль из нарисованных от руки рисунков и традиционной анимации, сделанной в Photoshop. Вместо сложных 3D-систем освещения разработчики использовали мягкие прозрачные формы. Команда создавала уровни с помощью 2D-активов, наложенных на 3D-среду, используя двухмерную физику, упаковщик спрайтов и систему частиц из набора инструментов из магазина ассетов.


Ассеты Unity, нарисованные Ари Гибсоном. Скриншот: PCGamer

Студия активно использовала Unity Asset Store — внутренний магазин, в котором разработчики выкладывают в общий доступ бесплатные и платные ассеты. Движок поддерживает большинство популярных форматов файлов. Модели, звуки, текстуры, материалы и скрипты можно запаковывать в формат .unitypackage и передавать другим разработчикам или выкладывать в магазине ассетов.

Трейлер Hollow Knight: Silksong

С момента релиза в 2017 году Hollow Knight продалась тиражом свыше трёх миллионов копий. Team Cherry развивают франшизу: вышло четыре бесплатных DLC, анонсирован сиквел с подзаголовком Silksong. Главным героем продолжения станет Хорнет, которую игроки уже встречали в оригинале.

Первые проблемы

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

Выделив какое то время рисованию предметов я задумался: — «А как мне их теперь хранить в игре??».

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

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

Было решено разбираться в базах данных. Точнее как с ними работать из под Unity.

Посмотрел пару видео, прочел пару статей. Да вроде не сложно, подумал я и начал делать. Скачал нужные библиотеки, написал примитивный код. Работает! Но не на телефоне, тут меня ждало разочарование. Библиотека, которую я скачал из того видео, не работала на телефоне ни в какую. Я скачивал ее их разных источников, разных версий. Одна из 10 заработала! Я был счастлив и добавил все свои 10 предметов в базу.

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

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

Adblock
detector