Как создать свою игру на 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