Как создать свою игру на unity. история. idle collection tycoon

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

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

Добавьте в него первый блок:

У объекта Road координаты должны быть по нулям, а у блока X можно поставить на ноль либо на -24.69 — столько он занимает места. Эта цифра нам понадобится, чтобы добавлять новые блоки.

Теперь для блока нужно подключить коллайдеры Box Collider. Но добавлять их нужно не на сам блок, а на дорожное полотно (Plane) и бордюры (Plane_002).

Для полотна сразу установите тег Road (его нужно создать, нажав на Add Tag). Затем приступайте к бордюрам. Это один объект, поэтому нужно просто добавить два коллайдера:

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

Шаг 1. Идея

Шаг первый довольно прост. Вы легко можете сделать это в уме.

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

  • Это платформер, игра с видом сверху или, может быть, изометрическая?
  • Какая будет тема и основная история?
  • Как это будет выглядеть?
  • Какой движок вы будете использовать?
  • Главное, чем ваша игра будет выделяться? Какую новую механику или идею он представляет или что будет хорошо?

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

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

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

Подготовка

NewРисунок 1: создание нового проектаAICreate ProjectРисунок 2: экран настройки проектаAssetsAssetsCreate → FolderMaterialsScriptsРисунок 3: создание новой папкиAssetsРисунок 4: окно Assets.HierarchyCreate → 3D Object → PlaneРисунок 5: создание объекта Plane.FloorX ScaleZ ScaleInspectorFloorРисунок 6: задание свойств объекта Floor.FloorMaterialsAssetsAssetsCreate → MaterialРисунок 7: создание нового материалаFloorРисунок 8: материал Floor.InspectorFloor
FloorHierarchyMesh RendererMaterialsРисунок 11: подготовка к изменению материала.FloorAssetsElement 0Mesh Renderer InspectorРисунок 12: задание материала Floor в качестве материала объекта Floor.FloorCreate → 3D Object → PlaneWallFloorX ScaleZ Scale

Название Position X Position Y Position Z Rotation X Rotation Z
Wall -35 21 -90
Wall (1) -1 11 -15 90
Wall (2) -1 11 13.5 -90
Wall (3) 34 21 90

WallMain CameraY PositionZ PositionX Rotation Рисунок 13: настройка объекта камеры.Hierarchy Create → 3D Object → SpherePlayerAdd Component InspectorРисунок 14: добавление нового компонента.RigidbodyRigidbodyRigidbodyPlayerРисунок 15: добавление компонента Rigidbody.TagInspectorPlayerРисунок 16: задание нового тэга.FloorX positionY PositionZ positionРисунок 17: размещение игрока.HierarchyCreate → 3D Object → CubeGuardRigidbodyNavMesh AgentAdd ComponentInspectorInspectorGuardРисунок 18: объект Guard в окне Inspector.Рисунок 19: Размещение объекта Guard.GuardGuardHierarchyCreate → 3D Object → SphereLookerLookerTransformInspector

  • Scale Xна 9.
  • Scale Y на 0.5.
  • Scale Z на 9.

LookerРисунок 20: размещение объекта Looker.LookerMaterialsAssetsLookerLookerРисунок 21: объект Looker с новым материалом.GuardWindowWindow → NavigationNavigationРисунок 22: окно Navigation.FloorHierarchyNavigationNavigation StaticРисунок 23: Navigation Static.BakeРисунок 24: переключение на меню Bake.BakeBakeРисунок 25: создание нового навигационного меша.Рисунок 26: текущая сцена с добавленным навигационным мешем.AssetsCreate → C# ScriptPlayerGuardLookerРисунок 27: создание нового скрипта.ScriptsAssetsРисунок 28: папка Scripts.PlayerPlayerAssets

Хорошие ресурсы для разработки игр в Unity

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

Watch this video on YouTube

Watch this video on YouTube

Watch this video on YouTube

Концептуальное искусство

  • Школа дизайна Фэн Чжу (более 90 часов уроков по концепт-арту)
  • Тайлер Эдлин Арт (Великое арт-сообщество BST с отзывами профессионалов о ежемесячных испытаниях)
  • Art Cafe (Интервью и мастер-классы с известными концепт-художниками)
  • Трент Канюга (иллюстратор и 2D-художник, который также создает свою собственную игру)

3D моделирование

  • CG Cookie (лучшие основы моделирования сетки в Blender, у них есть множество другого отличного контента для блендера)
  • Тор Фрик (модельеры и скульпторы твердых поверхностей в Blender)
  • Глеб Александров (Краткие мощные уроки по рендерингу в Blender)

Игровой дизайн

  • DoubleFine Amnesia Fortnight (разработчики игр, которые проводят двухнедельный хакатон и записывают весь процесс проектирования)
  • Инструментарий GameMakers (изучает принципы игрового дизайна)

Программирование

  • Handmade Hero (Написание игры и движка с нуля на C)
  • Джонатан Блоу (инди-разработчик, транслирующий свою разработку игры)
  • Brackeys ( хорошие учебные пособия по Unity)

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

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

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

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

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

PrefabsEnemy(-20, 0, 0)

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

C#MoveEnemyPrefabs\Enemy

Inspector

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

RoadHierarchyC#SpawnEnemy

RoadHierarchySizeWaypoints6Waypoint0Element 0Waypoint1Element 1

Добавление объекта

Объекты на экран Scene можно добавить из Asset Store. Для этого на панели инструментов нужно кликнуть на вкладку Window –> General –> Asset Store.

В строке поиска можно по названиям найти нужные компоненты, например, сет Free Platform Game Assets.

Как и другие ассеты, он загружается с помощью кнопки Import.

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

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

Шаг 2. Перенести в область Scene

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

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

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

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

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

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

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

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

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

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

Окно редактора Unity

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

Просмотр сцены: позволяет размещать и перемещать игровые объекты в сцене.

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

Инспектор: предоставьте подробную информацию о выбранном GameObject в сцене.

Assets / Project: здесь хранятся все префабы, текстуры, модели, скрипты и т. Д.

Иерархия: позволяет вложение и структурирование игровых объектов внутри сцены.

Теперь мы готовы начать!

Создание доски

Откройте сцену Game и кликните play. Простой фон со счетом и счетчиком движений.

Для начала создайте пустой объект игры и назовите его BoardManager.

BoardManager будет отвечать за генерирование досок и сохранение досок с элементами.

Сохраните BoardManager.cs в Scripts\Board and Grid в окне Project. Переместите в пустой объект BoardManager в окне иерархии. Сейчас у вас должно быть такое окно:

Откройте BoardManager.cs и посмотрите, что там уже есть:

public static BoardManager instance;     // 1
public List<Sprite> characters = new List<Sprite>();     // 2
public GameObject tile;      // 3
public int xSize, ySize;     // 4

private GameObject tiles;      // 5

public bool IsShifting { get; set; }     // 6

void Start () {
instance = GetComponent<BoardManager>();     // 7

Vector2 offset = tile.GetComponent<SpriteRenderer>().bounds.size;
CreateBoard(offset.x, offset.y);     // 8
}

private void CreateBoard (float xOffset, float yOffset) {
tiles = new GameObject;     // 9

float startX = transform.position.x;     // 10
float startY = transform.position.y;

for (int x = 0; x < xSize; x++) {      // 11
for (int y = 0; y < ySize; y++) {
GameObject newTile = Instantiate(tile, new Vector3(startX + (xOffset * x), startY +                                                                 (yOffset * y), 0), tile.transform.rotation);
tiles = newTile;
}
}
}

  1. Другим скриптам понадобится доступ к BoardManager.cs, таким образом скрипты используют паттерн Singleton со статической переменной instance.
  2. characters — это список спрайтов, которые будут использоваться как составные части мозаичных элементов.
  3. Игровой объект префаб элемента появится при создании доски.
  4. xSize и ySize — это оси X и Y на доске.
  5. Также есть 2D-массив под названием tiles, который будет сохранять элементы на доске.
  6. IsShifting сообщает системе, когда совпадают элементы, а доска заполняется вновь.
  7. Метод Start() устанавливает одноэлементное множество со ссылкой на BoardManager
  8. Вызов CreateBoard() происходит в пределах размеров спрайта tile.
  9. В CreateBoard() инициализируется 2D-массив tiles.
  10.  Поиск начальных позиций для генерации доски.
  11. xSize и ySize повторно выстраивают ряды и колонки для каждой итерации newTile.

Поместите свои спрайты символа в Sprites\Characters в окне проекта. Выберите BoardManager в окне иерархии. В окне-инспектор (Inspector) измените значение Character Size для компонента скрипта BoardManager на 7. Семь элементов добавятся в массив Characters и слоты для них высветятся в окне инспектор.

Теперь переместите каждый символ character в пустые слоты. И наконец, поместите префаб Tile в папку Prefabs, перетяните ее в слот Tile.

Ваша сцена должно выглядеть так:

Снова выберите BoardManager . В компоненте BoardManager в окне инспектор установите X Size8, а Y Size12. Это размер доски.

Кликните play. Доска появляется, но выходит за пределы экрана.

Элементы сместились вправо и вверх, первый элемент оказался на позиции BoardManager.

Исправьте позицию BoardManager.

Выберите BoardManager X — 2.66, и Y — 3.83.

Нажмите play. Так уже лучше, но нужно, чтоб элементы мозаики не были одинаковыми.

Subnautica: Below Zero

Один из главных трендов середины 2010-х — симуляторы выживания. Инди-студия Unknown Worlds Entertainment в своей серии Subnautica предлагает игрокам выживание в подводном инопланетном мире.

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

PC: 82

PS5: 79

XBSX: 84

NS: 75


Скриншот: игра Subnautica: Below Zero / Unknown Worlds Entertainment

Первая часть вышла в ранний доступ Steam в 2014 году, релиз состоялся в январе 2018 года. Сиквел Below Zero также вышел сначала в раннем доступе в январе 2019 года, спустя два с половиной года состоялся полноценный релиз. Подробнее о модели раннего доступа и её преимуществах для разработчиков мы писали ранее.

Команда Unity Accelerate Solutions помогла Unknown Worlds портировать обе части Subnautica на консоль Nintendo Switch. С помощью системы адресуемых активов Unity разработчики провели реконфигурацию архитектуры памяти. Система управления версиями Plastic SCM помогла оптимизировать контроль исходного кода.

«Subnautica — игра в открытом мире, изначально созданная для ПК, с большим количеством базовых потоковых технологий, которые могут сильно нагрузить современный компьютер. Мы просто не думали, что игра сможет работать на ожидаемом уровне производительности из-за того, как она была изначально спроектирована. С помощью наших друзей из Shiny Shoe и Unity мы смогли решить многие технические проблемы и добиться того, чтобы игра выглядела и работала отлично на всех платформах, в том числе на Switch».

Тед Гилл, президент Unknown Worlds Entertainment


Скриншот: игра Subnautica: Below Zero / Unknown Worlds Entertainment

Формула выживания в открытом мире со множеством точек интереса и яркий арт-дизайн подводного мира принесли популярность франшизе. Первая Subnautica победила в номинации «Компьютерная игра года» премии Golden Joystick Awards 2018. Продажи двух игр серии — шести миллионов копий.

Сценарии Unity

Для того чтобы сделать видеоигру на движке, разработчику придется немного программировать. Сценарии Unity могут быть выполнены на 3 языках программирования: Boo Script, Javascript, C #.

Чтобы создать скрипт, нажимают правой кнопкой мыши на окне проекта-> Create-> C # Script. Это создаст скрипт с любым именем NewScript. Чтобы отредактировать его, нужно дважды щелкнуть мышью, и откроется MonoDevelop, который представляет собой редактор, интегрированный с Unity.

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

После того как будет создан сценарий, можно добавить его к объекту «Сцены», просто перетащив сценарий и поместив его на объект. В окне «Инспектора» он появляется в списке компонентов, которые есть у спрайта. И также можно добавить его, нажав на Sprite, и в окне «Инспектора», щелкнув Добавить компонент-> Сценарии-> NAME_OUR_SCRIPT_NAME.

Доступ к другим игровым объектам и компонентам

Часто нам нужно взаимодействовать с другими GameObject, а также с их ассоциированными компонентами. Если у вас есть ссылка на игровой объект, это довольно просто.ComponentName comp = some_game_object.GetComponent <ComponentName> ();

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

Доступ через переменную инспектора

Это самый простой способ. Просто создайте общедоступную переменную для GameObject, как мы продемонстрировали ранее с префабами, и вручную перетащите ее на компонент через инспектор. Затем перейдите к переменной, как указано выше.

Доступ через теги

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

Это просто делается, как показано ниже.GameObject some_game_object = GameObject.FindGameObjectWithTag («Кирпич»);

Доступ через преобразование

Если мы хотим получить доступ к компонентам в каком-либо родительском объекте, мы можем легко сделать это с помощью атрибута transform.ComponentName comp = gameObject.transform.parent.GetComponent <ComponentName> ();

Доступ через SendMessage

В качестве альтернативы, если мы хотим отправить сообщение многим другим компонентам или хотим отправить сообщение объекту, который находится далеко вверх по вложенной иерархии, мы можем использовать функции отправки сообщения, которые принимают имя функции, за которым следуют аргументы.gameObject.SendMessage («MethodName», параметры); // Трансляция сообщениеgameObject.SendMessageUpwards («ИмяМетода», параметры); // Получено только компонентами, вложенными выше.

Создание процедурных платформ

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

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

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

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

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

Вот что нужно включить в сценарий:

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

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

  • Граница частного var: float устанавливает ограничение на ось Y, поэтому, когда наш персонаж прыгает выше чем эта граница, будет создана новая панель.
  • Частное вращение var: Quaternion; просто добавляет необходимое вращение для создания экземпляров наших префабов, однако мы добавляем вращение = Quaternion.identify; потому что это указывает движку не вращать игровой объект. Объект (наши сборные панели) буквально «идеально выровнен» с миром.
  • Последняя частная переменная lastPlatformPosition запомнит и сохранит положение последней платформы как трехмерный вектор (в основном, платформы не исчезнут за вами, поэтому вы можете вернуться назад по игровому миру, если хотите).

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

Наш следующий шаг — добавление кода, который определяет следующую позицию панели:

Мы используем делать пока цикл в этом коде, чтобы гарантировать, что значения вектора X и Z (его положение в игровом мире) не идентичны предыдущим платформам, поэтому наши процедурно сгенерированные платформы всегда будут увеличиваться в высоту.

Конечно, мы не хотим, чтобы эти ценности были строго размещены — немного случайности — это хорошо, иначе мы просто делаем идеальную лестницу. Итак, мы используем Random.Range между значениями -1 и 2, чтобы вызывать случайные значения для X и Z. Вы можете немного поиграть с этими числами, если хотите пошалить.

2016

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

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

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