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

Сама платформа Unity предоставляет широкий набор инструментов, но иногда не хватает и их. Тогда в дело вступает Asset Store с миллионами ассетов, моделей и примеров проектов.

Если у вас еще мало опыта в разработке приложений, имейте в виду: Asset Store – это огромный склад велосипедов, которые уже изобрели до вас. При этом там можно найти очень много бесплатного контента, или же контента по цене одной чашки кофе (сэкономьте на латте!).

Почему мы посвятили статью именно 2D играм? Посмотрите на рынок: 2D игры сейчас переживают ренессанс. Чтобы в этом убедиться, достаточно взглянуть на инди-сектор в Steam, Ketchapp и Zeptolab в мобильной разработке. 2D игры давно превратились из отжившего свое сектора в отдельную процветающую нишу рынка. Поэтому если вы решили делать 2D игру на Unity, сначала убедитесь, что у вас в арсенале есть все нужные инструменты, чтобы обеспечить должное качество продукта.

Немного про Asset Store

Если вы читаете эту статью, то скорее всего что-то слышали про Asset Store. Там хранятся несколько тысяч моделей, плагинов, систем частиц, скриптов и многое другое. Часть этого добра распространяется за деньги, а часть совершенно бесплатно! И мы настоятельно рекомендуем пользоваться этим обстоятельством. Прежде чем реализовывать A* для ваших юнитов, подумайте: может быть, кто-то уже сделал это до вас и выложил в общий доступ в удобной форме.

Ассеты с точки зрения 2D разработки

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

Что же нам может понадобиться? Вот список:

  • Готовые шаблоны проектов, с помощью которых можно быстро научиться базовым механикам создания игры. Это могут быть как платформеры, так и что-то более специфическое, например, roguelike.
  • Так называемые Sprite packs, то есть паки текстур для вашей 2D игры. Они очень полезны на том этапе, когда у вас еще нет арта, но уже появились идеи для механики. Спрайт паки можно использовать, просто чтобы было с чем работать. Естественно, в релизной версии их лучше заменить на оригинальную графику.
  • Готовые 2D объекты. Это могут быть как классические триггеры (зоны смерти, точки респауна, телепорты), так и что-то более интересное, скажем, физически верно рассчитанный меховой шарик.
  • Скрипты и расширения редактора. Это отдельный, огромный класс компонентов, которые могут выполнять широкий спектр разных задач. Можно поставить скрипт, который добавит несколько приятных визуализаций в редактор, а можно превратить Unity в инструмент визуального кодинга, вроде Unreal Blueprints.
  • Эффекты. Сюда можно отнести огромные паки частиц, эффекты на камеру, шейдеры для спрайтов и т.п. В этом сегменте попадается особенно много бесплатных ресурсов.
  • Анимации. Сюда можно отнести библиотеку простых анимаций (твинов), а также примеры покадровой или скелетной анимации.

Непосредственно ТОП

1. Standard Assets

Пак стандартных ассетов от самой Unity. Это самые необходимые и проверенные в деле ассеты. Все они относятся к следующим категориям: 2D, Cameras, Characters, CrossPlatformInput, Effects, Environment, ParticleSystems, Prototyping, Utility, Vehicles. Эти ассеты можно подключить при установке Unity.

Великолепная библиотека твинов. Содержит все необходимые виды твинов (move, scale, rotate, alpha, color). Ее отличает очень удобный вызов методов, поддержка easing type и многое другое. Комбинируя простые твины, можно создавать очень интересные эффекты.

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

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

Более сложный пример 2D платформера от самой Unity. В отличии от 2D Platformer Controller здесь добавлена анимация, стрельба и еще множество функций и объектов.

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

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

Большой ассет для работы с скелетной 2d анимацией, включая инверсную кинематику и автоматическую генерацию весов. Раньше он стоил 60 $, но недавно Unity сделала его бесплатным. Очень мощный инструмент.

Удобный ассет-редактор для создания тайловых уровней; может разбивать атласы по сетке, рисовать уровни в редакторе Unity, добавлять коллайдеры на блоки и настраивать слои отрисовки.

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

AutoSave – ассет, который не ценишь, пока он не сработает. Суть в том, что при обычном положении вещей если Unity зависает или вылетает, а вы не сохранили сцену, то все внесенные изменения пропадут. То есть вы можете час делать уровнь, забыть сохраниться и потерять его из-за критической ошибке в скрипте (например, бесконечного цикла). AutoSave сохраняет сцену при каждом нажатии на кнопку Play. Это очень удобно.

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

Мощный шаблон «рогалика». Содержит в себе управление героем, врагов, этажи уровней, звуки и эффекты.

Расширенный и усиленный вариант Simple Sprite Packer. Огромное количество функционала для работы с атласами.

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

Заключение

Разумеется, у каждого ассета из этого списка есть свои альтернативы, и, возможно, вы где-то не согласитесь с нашим выбором. Это нормально, если учесть, что в Asset Store несколько тысяч ассетов. Поэтому обязательно делитесь своими предложениями в комментариях.

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

Ввод

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

Клавиатура и джойстик

Функция Input.GetAxis очень удобна в применении на настольных платформах, потому что объединяет способы ввода с клавиатуры и джойстика. Тем не менее, эта функция не имеет смысла для мобильных платформ, которые рассчитаны на сенсорный ввод. Более того, стандартный ввод с настольной клавиатуры не переносится на мобильные устройства, потому как предназначен только для набора текста. Стоит добавить слой абстракции в ваш код обработки ввода если вы в будущем планируете перенос на другие платформы. В качестве простого примера, если вы делали гонку, то вы можете создать собственный класс ввода и обрабатывать вызовы Unity API в собственных функциях:-

// Returns values in the range -1.0 .. +1.0 (== left .. right). function Steering() { return Input.GetAxis("Horizontal"); } // Returns values in the range -1.0 .. +1.0 (== accel .. brake). function Acceleration() { return Input.GetAxis("Vertical"); } var currentGear: int; // Returns an integer corresponding to the selected gear. function Gears() { if (Input.GetKeyDown("p")) currentGear++; else if (Input.GetKeyDown("l")) currentGear--; return currentGear; }

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

Касания и клики

Функции Input.GetMouseButtonXXX спроектированы таким образом, что имеют достаточно очевидную интерпретацию на мобильных устройствах, хотя нет никакой “мыши” как таковой. Одиночное касание экрана сообщает о ЛКМ и свойство Input.mousePosition передаёт позицию нажатия на экран до тех пор, пока палец касается экрана. Это означает, что игры с простым управлением мышью зачастую могут свободно работать как на настольных, так и на мобильных платформах. Тем не менее обычно преобразование намного сложнее. Настольная игра может использовать более одной кнопки мыши, а мобильная способна различать несколько касаний экрана одновременно.

Как и c вызовами API, проблема может частично решена с помощью представления входных логических значений, которые потом используются в остальной части игрового кода. Например, жест-“щипок” для масштабирования на мобильном устройстве может быть заменен на настольном компьютере нажатием клавиши плюс/минус; функция, обрабатывающая ввод, может просто вернуть значение с плавающей точкой, определяющее коэффициент масштабирования. Точно так же, можно было бы нажатие двумя пальцами на мобильном устройстве заменить ПКМ на настольном компьютере. Тем не менее, если свойства устройства ввода являются неотъемлемой частью игры, то невозможно перестроить их на другую платформу. Это может означать, что игра не может быть перенесена на все платформы или, что ввод и/или геймплей должны быть серьёзно изменены.

Акселерометр, компас, гироскоп и GPS

Эти устройства ввода появились благодаря мобильности портативных устройств, потому как у настольных компьютеров нет эквивалентных устройств. Тем не менее, в некоторых случаях, использование стандартных способов управления игрой может быть достаточно легко портировано. Например, рулевое управление в гонке может быть реализовано с помощью наклона мобильного устройства (определяется с помощью акселерометра). В подобных случаях, вызовы API ввода, как правило, довольно легко заменить, поэтому ввод с акселерометра может быть заменен нажатием клавиш. Тем не менее, это может быть необходимо для калибровки или даже варьирования сложности игры, чтобы учесть другой метод ввода. Наклон устройства медленнее и в конце концов напряжённее, чем нажатие клавиш, а также труднее сконцентрироваться на дисплее. Это может привести к более трудному освоению игры на мобильном устройстве, и поэтому целесообразнее замедлить геймплей или предоставить больше времени на уровень. Это потребует от кода игры, чтобы тот был сконструирован так, что эти факторы были легко учтены.

ОЗУ, ПЗУ и производительность CPU

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

Проигрывание видео

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

Требования к ПЗУ

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

Автоматическое управление памятью

Мощность CPU

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

Unity Game Development Academy: Make 2D & 3D Games

Duration 35:30:04

Unity Game Development Academy: Make 2D & 3D Games - Полный список уроков

Развернуть / Свернуть
  • Урок 1. Unity 3D Course overview 00:07:11
  • 00:06:39
  • 00:06:45
  • Урок 4. Zombie Roller- Your First Unity 3D Game 00:42:02
  • Урок 5. Unity 3D pricing plans 00:03:57
  • Урок 6. How to access community & chat in this Unity 3D course 00:03:04
  • Урок 7. C# variables in Unity 3D 00:12:23
  • Урок 8. C# numbers in Unity 3D 00:20:08
  • Урок 9. C# conditionals in Unity 3D 00:23:06
  • Урок 10. C# arrays & loops in Unity 3D 00:28:07
  • Урок 11. C# functions & methods in Unity 3D 00:29:26
  • Урок 12. Object oriented programming & inheritance in C# 00:23:48
  • Урок 13. Intro to Haunted Zombie Rush 00:01:12
  • Урок 14. 3D Game Assets for your games in Unity 00:03:28
  • Урок 15. Unity 3D interface overview 00:09:13
  • Урок 16. Project creation & importing assets into Unity 3D 00:05:23
  • Урок 17. Working with lighting & materials in Unity 3D 00:14:56
  • Урок 18. Altering shaders in Unity 3D 00:07:05
  • Урок 19. Switching build platforms in Unity 3D 00:10:20
  • Урок 20. Moving objects in Unity 3D 00:22:54
  • Урок 21. Coroutines & wait times in Unity 3D 00:23:25
  • Урок 22. Inheritance & reusability in Unity 3D 00:14:05
  • Урок 23. Importing & animating a character model in Unity 3D 00:17:56
  • Урок 24. Unity 3D rigidbody & adding force with physics 00:27:38
  • Урок 25. Working with audio in Unity 3D 00:08:45
  • Урок 26. Detection collisions & using assertions in Unity 3D 00:13:39
  • Урок 27. Game state & singletons in Unity 3D 00:22:56
  • Урок 28. Creating a 2nd camera & how to make UI in Unity 3D 00:14:41
  • Урок 29. Exercise - Extending your Unity 3D Game 00:04:53
  • Урок 30. Bonus- Simple physics game in Unity 3D 00:12:48
  • Урок 31. Switching to a better code editor (VS Code) 00:13:14
  • Урок 32. Intro to Devslopes Defender Unity 3D game 00:01:00
  • Урок 33. The 2D Game Assets for your games in Unity 00:01:59
  • Урок 34. Importing sprites & grid snapping in Unity 3D Part 1 00:18:13
  • Урок 35. Importing sprites & grid snapping in Unity 3D Part 2 00:28:32
  • Урок 36. Animations & 2D colliders in Unity 3D 00:29:15
  • Урок 37. Game manager singleton & spawning in Unity 3D 00:29:22
  • Урок 38. Enemy pathfinding in Unity 3D 00:31:53
  • Урок 39. Generics & singletons in Unity 3D 00:26:46
  • Урок 40. Data encapsulation, spritesheets, & buttons in Unity 3D 00:29:50
  • Урок 41. 2D Raycasts, tags, and placing towers in Unity 3D 00:24:45
  • Урок 42. Projectiles, colliders, and more tower placement in Unity 3D 00:29:54
  • Урок 43. Registering enemies & distance-based attacks in Unity 3D 00:34:18
  • Урок 44. Shooting projectiles at enemies in Unity 3D 00:37:31
  • Урок 45. Killing enemies & other animations in Unity 3D 00:29:45
  • Урок 46. More UI & finishing touches in Unity 3D 00:28:40
  • Урок 47. UI Labels & buttons for GUI in Unity 3D 00:33:24
  • Урок 48. Building your Unity 3D game logic part 1 00:27:29
  • Урок 49. Building your Unity 3D game logic part 2 00:24:32
  • Урок 50. Adding sound FX to your Unity 3D game 00:24:13
  • Урок 51. Spawning random enemies in your Unity 3D game 00:06:10
  • Урок 52. Exporting your game as a standalone platform in Unity 3D 00:05:55
  • Урок 53. Intro to Legend of Devslopes 00:00:54
  • Урок 54. Prepping the Unity project & building the level 00:32:28
  • Урок 55. Importing character assets into Unity 00:28:18
  • Урок 56. Creating the character animation controller in Unity 00:41:21
  • Урок 57. Animating the player in Unity 00:29:39
  • Урок 58. Enemy pathfinding & navigation in Unity 00:28:12
  • Урок 59. Rigidbody and weapons in Unity 00:20:42
  • Урок 60. Implementing enemy attack systems in Unity 00:20:46
  • Урок 61. Implementing player health in Unity 00:33:34
  • Урок 62. Enemy health & player attack in Unity 00:37:54
  • Урок 63. Heads up display UI in Unity 00:15:06
  • Урок 64. Particle systems in Unity 00:19:01
  • Урок 65. How to create spawn points in Unity 00:04:36
  • Урок 66. Game manager singleton in Unity 00:33:58
  • Урок 67. Adjusting animations in Unity 00:07:58
  • Урок 68. Creating ranged arrow attacks in Unity 00:40:29
  • Урок 69. Health powerup feature and logic in Unity 00:28:50
  • Урок 70. Speed powerup feature and logic in Unity 00:22:07
  • Урок 71. Creating a game menu in Unity 00:35:11
  • Урок 72. Legend of Devslopes finishing touches in Unity 00:17:34
  • Урок 73. Intro to lightning 00:01:19
  • Урок 74. Creating particle effects in Unity 00:26:19
  • Урок 75. Working with skyboxes & directional lights in Unity 00:11:18
  • Урок 76. Using point lights to create mood in Unity 3D 00:16:59
  • Урок 77. Working with spot lights & subtle light changes 00:14:13
  • Урок 78. How to use cookies in lighting in Unity 00:10:42
  • Урок 79. How to bake lighting & support mobile games in Unity 00:08:29
  • Урок 80. Intro To Devcraft Game New 00:00:45
  • Урок 81. Creating Your First Plane Of Cubes New 00:41:58
  • Урок 82. Create Multiple Voxels New 00:36:23
  • Урок 83. Creating Multiple Chunks Of Voxels New 00:22:08
  • Урок 84. Adding Dimensions New 00:23:45
  • Урок 85. Setting Up Textures For Mobile New 00:45:35
  • Урок 86. Camera Setup For Our Character New 00:29:58
  • Урок 87. Adding Movement To Your Character New 00:30:07
  • Урок 88. Building And Destroying Blocks New 00:29:10
  • Урок 89. Character Spawning New 00:13:47
  • Урок 90. Rotating Your Character New 00:05:15
  • Урок 91. Fixing A Few Bugs New 00:07:46
  • Урок 92. Adding Audio New 00:09:48
  • Урок 93. Building Your Game To Android New 00:10:41
  • Урок 94. Building Your Game To Ios New 00:05:57
  • Урок 95. Intro to Animation & Cinematics in Unity 3D 00:01:28
  • Урок 96. Unity 3D animation editor 00:17:16
  • Урок 97. Unity cutscenes, cameras, & animation events 00:22:20
  • Урок 98. Animation curves, camera management, & character cinematics in Unity 00:25:41
  • Урок 99. Intro to Skeletons VS Zombies 00:02:02
  • Урок 100. Pathfinding with Navigation Mesh in Unity 3D 00:14:34
  • Урок 101. Camera controls for MOBA in Unity 00:08:22
  • Урок 102. Point & click movement with pathfinding in Unity 00:26:25
  • Урок 103. Animations & fireball particle effect in Unity 00:32:04
  • Урок 104. Shooting fireballs bullets in Unity 00:07:12
  • Урок 105. Intro to Unity 3D multiplayer 00:14:05
  • Урок 106. Network Manager & spawn points 00:19:38
  • Урок 107. Networking & player movement in Unity 00:07:35
  • Урок 108. Networking projectiles in Unity 00:22:09
  • Урок 109. SyncVars & keeping game data synchronized across the network in Unity 00:29:21
  • Урок 110. Rpc & calling client functions from the server in Unity 00:12:38
  • Урок 111. Unity Multiplayer Service & online matchmaking in Unity 00:07:41

27-04-2017 30-11--0001 en 238 уроков

Курс полностью основан на практике, и мы собираемся создать 6 полнофункциональных игр с нуля, используя Unity Game Engine.
Курс учит всему, от базового до более продвинутого мастерства, о том, как планировать, проектировать, разрабатывать и публиковать вашу игру.
Используя то, что вы получите в этом курсе, вы будете обладать более чем достаточными знаниями, чтобы продолжить совершенствовать себя в области разработки игр, используя...

Duration 33:21:45

23-10-2016 30-11--0001 en 65 уроков

Unity является одним из самых популярных игровых движков для мобильных и настольных игр и в режиме рил тайм моделирования. В этом курсе, автор Адам Креспи рассматривает методы, используемые в разработке игр Unity и вводит в основы дизайна уровней, анимации и много других прелестей движка. Сперва, узнай, как импортировать модели и текстуры из таких программ, как 3ds Max и Maya, настрой игровые объекты, а также добавь анимацию, чтобы довести игру...

Duration 06:47:56

05-02-2017 30-11--0001 ru 8 уроков

Duration 04:44:52

16-01-2017 30-11--0001 en 113 уроков

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

Duration 12:19:46

27-12-2016 30-11--0001 ru 7 уроков

Duration 03:44:07

16-03-2017 13-06-2018 ru 5 уроков

Теория это хорошо, но как все будет на практике? Этот курс по C Sharp создан для того, чтобы показать вам на примере модов к GTA 5 реальное использования языка C#. Вместе с автором курса вы закрипите основыне конструкции языка, создавая моды к игре. Курс будет полезным как новичкам в разработке игр, так и продвинутым разработчикам.

Duration 03:19:12

28-04-2017 30-11--0001 en 247 уроков

Этот пошаговый курс представляет собой ценный материал для будущих разработчиков игр на Unity, который отправит вас в путешествие, которое начинается с нахождения идеи для вашей игры, создания прототипа, размещения структуры и разработки в 2 и 3D.
Вы узнаете, как проектировать свою игру, проверять ее, строить и видеть, как она работает, и играть в нее.
Во время этого курса вы будете создавать игры Candy Crush, Subway Surfers,...

Duration 17:27:01

29-04-2017 30-11--0001 en 42 урока

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

Многопользовательский сетевой интерфейс высокого уровня (HLAPI)
- NetworkIdentity и NetworkTransform, для
Удаленных действий, таких как Commands и ClientRPCs
- SyncVars и SyncVar hooks
- NetworkManager и...

Как создать игру в Unity

Казуальные игры в жанре match 3 (три в ряд) - одни из самых популярных на рынке. Многие играют в Candy Crush, Bejeweled и прочие. У этих игр простая цель: перемещать мозаичные элементы до тех пор, пока три одинаковых элемента не окажутся рядом. Когда это происходит, совпавшие элементы исчезают, а на их месте появляются другие. Игрок при этом набирает баллы.

В этом руководстве будут освещаться следующее:

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

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

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

Share this article:

Related Articles

В первой главе вы найдете основную информацию по загрузке и установке Unity и подготовке первой сцены нашей игры.

Настройка среды в Unity

Начнем с самого простого: загрузки и настройки Unity .

Загрузите последнюю версию с официального сайта или торрента и запустите установочный файл.

Для редактирования кода в Unity (4.0.1 и выше) служит редактор MonoDevelop. Если вы работаете в Windows, вы можете (и я вам советую) использовать альтернативый редактор Visual Studio 2013 Desktop (C#) для Windows , после чего в настройках Unity измените редактор по умолчанию на Visual Studio.

Полезно знать: невозможно использовать отладчик Visual Studio 2013 Express с Unity. Вы должны иметь Pro версию Visual Studio и купить UnityVS плагин. С версией Express, вы будете иметь лучший редактор кода, но отсутствие отладчика сведет на нет все его достоинства.

Mac OS X

Заметка о папке Resources : если вы уже работали с Unity, вы знает, что Resources – полезная и уникальная папка. Она позволяет загрузить в скрипт объект или файл (с помощью статичного класса Resources). Она понадобится нам в самом конце (в главе, посвященной меню). Проще говоря, пока мы не будем ее добавлять.

Наша первая игровая сцена

Панель Hierarchy (Иерархия) содержит все объекты, которые доступны в сцене. Это то, чем вы манипулируете, когда начинаете игру с помощью кнопки "Play".

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


Как вы можете видеть здесь, у нас здесь 3 потомка для объекта Level .

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

Убедитесь, что все они имеют координаты (0, 0, 0) и тогда вы сможете легко их найти! Пустые объекты никак не используют свои координаты, но они влияют на относительные координаты их потомков. Мы не будем говорить об этой теме в этом уроке, давайте просто обнулим координаты ныших пустых объектов.

Заполнение сцены

По умолчанию, новая сцена создается с объектом Main Camera (Главная камера). Перетащите ее на сцену.

Для начала создайте эти пустые объекты:

Scripts Мы добавим наши скрипты сюда. Мы используем этот объект, чтобы прикрепить сценарии, которые не связаны с объектом – например, скрипт гейм-менеджера. Render Здесь будет наша камера и источники света. Level

В Level создайте 3 пустых объекта:

  • 0 - Background
  • 1 - Middleground
  • 2 - Foreground

Сохраните сцену в папке Scenes . Назовите ее как угодно, например Stage1 . Вот, что у нас получилось:

Совет: по умолчанию игровой объект привязан к положению родителя. Это приводит к интересному побочному эффекту при использовании объекта камеры: если камера является дочерним объектом, она автоматически будет отслеживать положение родителя. Если же она является корневым объектом сцены или находится внутри пустого игрового объекта, она всегда показывает один и тот же вид. Однако если вы поместите камеру в движущийся игровой объект, она будет следовать за его передвижениями в пределах сцены. В данном случае нам нужна фиксированная камера, поэтому мы помещаем ее в пустой объект Render . Но запомните это свойство объекта камеры, оно может вам пригодиться. Мы подробно остановимся на этой теме в главе "Паралаксный скроллинг".

Мы только что создали базовую структуру нашей игры. На следующем этапе мы начнем делать забавные вещи: добавим на сцену фон и кое-что еще!

Добавляем фон в сцену

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


Импортируйте изображение в папку Textures (Текстуры). Просто скопируйте файл в нее, или перетащите его из проводника. Не беспокойтесь сейчас о настройках импорта.

Создайте в Unity новый игровой объект Sprite на сцене.

Что такое спрайт?

По сути, спрайт – это 2D-изображение, используемое в видео-игре. В данном случае это объект Unity для создания 2D-игр.

Добавляем текстуру спрайта

Unity может автоматически установить фон для вашего спрайта. Если ничего такого не произошло, или если вы хотите изменить текстуру, перейдите на вкладку инспектора и выберите background : (фон)


Вы должны нажать на маленький круглый значок справа от поля ввода, чтобы появилось Select Sprite (Выбрать спрайт) в Инспекторе

Мой спрайт не появляется в диалоговом окне! Убедитесь, что вы находитесь в вкдадке Assets диалогового окна "Select Sprite" (Выбрать спрайт). Если вы видите диалоговое окно пустым, - не пугайтечсь. Дело в том, что для некоторых установок Unity, даже со свежим новым 2D проектом изображения импортируются как "Текстура", а не "Спрайт". Чтобы это исправить, необходимо выбрать изображение на панели "Проект", и в "Инспекторе", изменить свойство "Текстура Type" имущество "Sprite":

Итак, мы создали простой спрайт отображающий облака на небе. Давайте внесем изменения в сцену. В панели Hierarchy (Иерархия) выберите New Sprite . Переименуйте его в Background1 или что-то такое, что легко запомнить. Переименуйте его в Background1 или что-то такое, что легко запомнить. Затем переместите объект в нужное место: Level -> 0 - Background . Измените координаты на (0, 0, 0) .


Создайте копию фона и поместите его в (20, 0, 0) . Это должно отлично подойти к первой части.

Tip : Вы можете создать копию объекта с помощью клавиш cmd + D в OS X или ctrl + D Windows .

Слои со спрайтами

Следующее утверждение очевидно, но обладает некими неудобствами: мы отображения 2D мир. Это означает, что все изображения на одной и той же глубине, то есть 0 . И вы графический движок не знает, что отображать в первую очередь. Слои спрайтов позволяют нам обозначить, что находится спереди, а что сзади.

В Unity мы можем изменить "Z" наших элементов, что позволит нам работать со слоями. Это то, что мы делали в этом руководстве перед обновлением до Unity 5, но нам понравилась идея идея использовать слои со спрайтами. У вашего компонента Sprite Renderer есть поле с именем Sorting Layer с дефолтным значением. Если щелкнуть на нем, то вы увидите:

Давайте добавим несколько слоев под наши нужды (используйте кнопку +):

Добавьте фоновый слой к вашему спрайту фона:

Настройка Order in Layer - это способ ограничить подслои. Спрайты с меньшим номером оказываются перед спрайтами с большими числами.

Слой Default нельзя удалить, так как это слой, используемый 3D-элементами. Вы можете иметь 3D-объекты в 2D игре, в частности, частицы рассматриваются как 3D-объекты Unity, так что они будут рендериться на этом слое.

Добавление элементов фона

Также известных как props . Эти элементы никак не влияют на геймплей, но позволяют усовершенствовать графику игры. Вот некоторые простые спрайты для летающих платформ:


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

Получение двух спрайтов из одного изображения

Выполняйте следующие действия:

  1. Импортируйте изображения в папку "Текстуры"
  2. Выберите спрайт Platform и перейдите к панели Инспектор
  3. Измените "Sprite Mode" на "Multiple"
  4. Нажмите на кнопку Sprite Editor (Редактор спрайта)

В новом окне (Sprite Editor) вы можете рисовать прямоугольники вокруг каждой платформы, чтобы разрезать текстуру на более мелкие части:


Кнопка Slice в левом верхнем углу позволит вам быстро и автоматически проделать эту утомительную работу:

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

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


Добавим их в сцену. Для этого мы будем выполнять те же действия что и для фона: создадим новый спрайт и выберим platform1 . Потом повторим эти действия для platform2 . Поместите их в объект 1 - Middleground . Убедитесь, что их позиция по оси Z равна нулю.


Prefabs (Префабы)


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


Заметка о кнопках "Prefab": При последующей модификации игрового объекта, вы можете использовать кнопку "Apply", чтобы применить эти изменения к Prefab , или кнопку "Revert", чтобы отменить все изменения игрового объекта в свойстваъ Prefab . Кнопка "Select" переместит выбранные свойства в ассет Prefab в окне проекта (они будут выделены).

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

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

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

Слои

Прежде чем двигаться дальше, мы модифицируем наши слои, чтобы избежать каких-либо проблем с порядком их отображения. Для этого просто измените позицию игровых объектов по оси Z во вкладке Hierarchy (Иерархия) следующим образом:

При переключении из 2D режима в 3D, в окне "Scene" (Сцена) вы будете четко видеть слои:


Кликнув на игровом объекте Main Camera , вы увидите, что флажок Projection установлен на Orthographic . Эта настройка позволяет камере визуализировать 2D игру без учета трехмерных свойств объектов. Имейте в виду, что даже если вы работаете с 2D объектами, Unity по-прежнему использует свой 3D движок для визуализации сцены. Рисунок выше это наглядно демонстрирует.

В следующем уроке:

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