Робимо просту гру з кнопками, ящиками та дверима на Unity.

Як створити гру в Unity

КазуальніІгри в жанрі match 3 (три в ряд) - одні з найпопулярніших на ринку. Багато хто грає в Candy Crush, Bejeweled та інші. У цих ігор проста мета: переміщати мозаїчні елементи до тих пір, поки три однакові елементи не виявляться поруч. Коли це відбувається, елементи, що збіглися, зникають, а на їх місці з'являються інші. Гравець у своїй набирає бали.

У цьому посібнику висвітлюватимуться наступне:

  • Створення дошки, заповненої мозаїчними елементами
  • Вибір та скасування вибору мозаїчних елементів
  • Ідентифікація сусідніх елементів за допомогою raycasts
  • Заміна елементів
  • Пошук збігаються трьох і більше елементів за допомогою raycasts
  • Заповнення порожніх елементів
  • Ведення рахунку та підрахунок рухів

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

Надалі ви зможете додавати тимчасові режими, різні рівні з дошками різних розмірів, бонусні окуляри за комбінації, або анімаційні ефекти.

Share this article:

Related Articles

Розробник дитячого мобільного паззла Fold the Adventure Олексій Галкін написав для ЦП колонку про те, на що слід звернути увагу при розробці мобільної гри на платформі Unity: як вибрати правильні асети з Asset Store, в якому сервісі зберігати дані про прогрес користувачів і де взяти звуки ігри.

В закладки

початок

Щоб зробити гарну гру, потрібна гарна ідея. Але навіть маючи ідею створити на її основі гідну гру зовсім непросто. Крім банальної удачі, існує безліч речей, з якими доводиться мати справу. Нескінченна кількість рішень необхідно прийняти в дуже скромний час. Адже час – це гроші, а бюджет проекту має тенденцію зникати до того, як зроблено хоч щось гідне демонстрації (не кажучи вже про випуск).

Ця історія про те, як наша невелика інди-команда створювала гру Fold the Adventure («Склади пригоду») на основі оригінальної ідеї. Оскільки гра випущена, ми можемо перевести дух і окинути три місяці, витрачені на розробку. Незважаючи на наявність багаторічного досвіду в ігровій індустрії, створення Fold the Adventure змусило нас неабияк попітніти через непередбачувані повороти подій та дуже обмежені ресурси. Ласкаво просимо до нашої пригоди!

Вибір двигуна: Unity

Сказати по правді, двигун нам вибирати не довелося. Ми одразу взяли Unity і не пошкодували про це. Нашим першорядним завданням було створення порівняно невеликої гри та запуск її на максимальній кількості платформ. При цьому хотілося уникнути метушні з програмуванням на Objective C і Java. З Unity нам це вдалося. І хоча все було не так просто і гладко, як передбачалося, двигуном ми залишилися задоволені.

На нашу думку, Unity - це найкращий ігровий движок для інді-розробки зараз. Його програмна архітектура добре продумана, редактор зроблений добротно і стає кращим з кожною версією. Почати користуватися Unity легко, але досвідченим розробникам він може здатися спочатку контрінтуїтивним. Тим не менш, і новачки, і професіонали, швидше за все, зіткнуться з одним і тим же підводним камінням.

  • Необхідно від початку витратити час на вивчення базової архітектури Unity, включаючи ігрові об'єкти, скриптовані об'єкти, сцени, префаби, асети, методи-події та порядок їх виклику, співпрограми, вимірювання часу, обробку введення, серіалізацію. Unity може здатися легким у використанні двигуном, але без розуміння його основ можна провести нескінченний годинник за налагодженням та рефакторингом.
  • З початку сформулюйте правила структуризації, і навіть іменування ассетів і ігрових об'єктів. Навіть невелика гра має тенденцію перетворюватися на хаос без належної організації. Існує багато статей, присвячених цьому питанню. Можна також орієнтуватися на проекти, які публікують розробники в Unity Assets Store.
  • Програмуйте якнайменше. Натомість активно використовуйте WYSIWYG (What You See Is What You Get - властивість прикладних програм, у яких зміст відображається в процесі редагування та виглядає максимально близько схожим на кінцеву продукцію - ред.) можливості редактора Unity. Завдяки легкій розширюваності, редактор Unity дозволяє перетворити гру на зручний конструктор, яким зможуть користуватися навіть ті, хто не вміє програмувати. А це суттєво спрощує та прискорює створення ігрового контенту.
  • Уникайте використання звичних практик, які погано поєднуються з ідеологією Unity. Якою б привабливою була можливість розміщення всіх об'єктів гри в рамках однієї сцени або збереження параметрів ігрової механіки в XML-файлах, подібний підхід істотно ускладнить життя на пізніших етапах розробки.
  • Будьте обережні та уважні при використанні систем керування версіями. Unity має тенденцію непередбачено змінювати файли. Наприклад, внесення змін до префабу тягне за собою модифікацію всіх файлів сцен, в яких він використовується, але тільки після їхнього збереження. Завжди використовуйте force text як режим серіалізації ассетів та уважно стежте за файлами, які заливаєте на сервер, щоб не знищити результат роботи колег.
  • Тестуйте гру на максимально можливій кількості платформ. При цьому не забувайте, що установки можна визначити для кожної з платформ окремо. Без подібного тестування, ви, як і ми, можете зіткнутися з тим, що ваша гра поводиться по-різному в web player під Windows і OS X.

Ассети: створювати чи купувати

Якщо у вас невелика команда за сильно обмежених часу та бюджету, то створити велику кількість якісних ігрових ассетів з нуля практично неможливо. Доводиться утихомирювати грандіозні амбіції та мінімізувати кількість необхідного. Але навіть за умови мінімізації потрібно залишити щось, на що гравцеві було б приємно подивитися.

Якщо асети для гри можуть бути зроблені силами команди - однією проблемою менше (скоріше за все). Але є ще фаза прототипування, а для неї також потрібні асети, які з великою ймовірністю будуть викинуті. Тому практично кожній команді потрібні асети, які вона не може чи не хоче робити. Питання у тому, де їх взяти.

Першою і найбільш очевидною відповіддю для нас, як для Unity розробників, був Unity Assets Store. Якою б привабливою не здавалася ця можливість, вона тягне за собою і низку складнощів:

  • Ассети в Unity Assets Store доступні всім без винятку. Однак ніхто не хоче, щоб їхня гра була схожа на інші. Принаймні ми цього дуже не хотіли.
  • Практично неможливо купити один пакет ассетів, який би задовольнив усі потреби проекту, і виникає проблема стилістичної сумісності. Для Fold the Adventure ми купили кілька паків, з яких використали менше половини.
  • Незважаючи на те, що загальна кількість ассетів в Unity Assets Store досить велика, знайти серед них щось, що підходить для конкретних потреб, буває дуже непросто. При цьому якість найчастіше залишає бажати кращого. Ми витратили годинник на пошуки, при цьому не завжди маючи можливість оцінити якість пакета без його покупки.

Другим варіантом був аутсорсинг асетів. Безумовно, цей шлях забирає більше часу та грошей, ніж просто покупка чогось із Unity Assets Store. Однак, при вдалому розкладі, ассети, що отримуються, унікальні і якісніші.

Існувала також можливість купівлі ассетів із джерел крім Unity Assets Store. Однак тут виникала проблема сумісності з Unity і ми вирішили утриматися від таких експериментів.

Коли ми ухвалювали рішення про те, які асети робити самостійно, а які ні, ми почали з їхньої категоризації. Як виявилося, ассетів, які були унікальні для нашої гри та вирізняли її серед інших, було порівняно небагато. Їх ми вирішили зробити самотужки, вдаючись до допомоги аутсорсу там, де це було можливо. Решту було куплено в Unity Assets Store.

Ось кілька простих правил, до яких ми прийшли в ході пошуку та купівлі ассетів у Unity Assets Store

  • Щоб уникнути стилістичних розбіжностей, бажано купувати асеты одного типу одного автора. Це не заважає купити моделі в однієї студії, а партикли в іншої, але потрібно стежити за сумісністю стилів.
  • Уникайте використання ассетів у тому вигляді, в якому вони були куплені. Достатньо внести невеликі зміни (наприклад, трохи перемалювати текстури, реструкурувати партикли) або використовувати асети нестандартним чином.
  • Якщо ви плануєте випуск гри на мобільних платформах, переконайтеся, що асети, що купуються, оптимізовані під них.

Музика і звуки заслуговують на окрему увагу. Вони рідко створюються інди-командою самостійно (якщо у вас є композитор, то вам або дуже пощастило, або вже не інді). На щастя, існує велика кількість сервісів, що постачають royalty-free музику та звуки, включаючи Unity Assets Store. І це зовсім недорого.

Недостатньо просто купити музику та звуки. Необхідно зробити так, щоб вони правильно звучали у грі та не дратували слух. Якщо ви впевнені у своїх силах, можна спробувати зробити це самостійно. Ми ж звернулися за допомогою до студії, що спеціалізується на озвученні. Отриманий результат був істотно кращим за те, що ми могли зробити самі, і коштував своїх грошей.

Де зберігати дані: Parse

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

У пошуках кращого рішення ми виявили Parse. Parse – це крос-платформний сервіс BaaS (Backend as a Service – платформа типу «бекенд як сервіс», надає хмарну серверну інфраструктуру для всіх типів додатків – ред.), який дозволяє додатку зберігати дані у хмарі, підтримує авторизацію користувачів, серверні функції, push-оповіщення та аналітику. Це не вичерпний список функціональності, але дає загальне уявлення про те, що є Parse.

Однією з причин, через які ми вибрали Parsе, була його інтеграція з Facebook (перша версія Fold the Adventure створювалася саме для Facebook). І незважаючи на те, що пізніше фокус розробки був зміщений на мобільні платформи, ми продовжили використовувати Parse.

Ще однією приємною особливістю Parse є його цінова політика. Спочатку вона здається трохи дивною, але після роздумів і розрахунків виявляється більш ніж вдалою. Фактично, ви обмежені кількістю запитів на секунду. Хороша новина в тому, що 30 запитів на секунду даються безкоштовно. Може здатися, що це зовсім небагато, але цього достатньо для підтримки тисяч користувачів. За умови, що ви використовуєте ці запити розумно.

У Parse ви робите все через запити. Для отримання та зміни полів даних, створення відносин між таблицями, формування вибірки - для всього потрібен запит. На перший погляд, кількість запитів має бути досить великою, але, насправді, більшу частину елементарних операцій можна об'єднати в один запит за допомогою методу ParseObject.SaveAllAsync. Крім того, Parse викине виняток, якщо межа запитів за секунду перевищена. Але нічого не заважає почекати деякий час і виконати запит повторно. І хоча гра в такому випадку може здатися користувачеві «підвисла», ця проблема легко обходиться за допомогою внесення невеликих змін до інтерфейсу користувача і логіку збереження і читання даних.

Єдине, для чого Parse не слід використовувати, то це для створення ігрового сервера. Навіть якщо ви розробляєте покрокову гру, призначення Parse дуже відмінно. Існують інші рішення, які значно краще підходять для цих цілей.

Використання Parse у рамках Unity не пов'язане з особливими труднощами та добре документоване. По суті, вам необхідно завантажити Parse SDK, налаштувати вашу гру на сервері Parse та у проекті Unity, а також трохи попрограмувати. Один очевидний нюанс: ви не зможете використовувати Parse, якщо пристрій, на який встановлено вашу гру, не має доступу до інтернету.

Якщо є необхідність підтримувати офлайн-режим та оновлювати дані в Parse за наявності мережного з'єднання, то вам доведеться написати для цього невелику окрему систему. Ми використали для цього клас PlayerPrefs. Система зберігає дані локально та заливає їх у Parse, як тільки виявляє наявність підключення до інтернету.

Стаціонарні платформи проти мобільних: компроміси

Незважаючи на поступове зближення протягом останніх років, стаціонарні та мобільні платформи, як і раніше, сильно відрізняються один від одного. Це стає очевидним при спробі змусити "гарні" шейдери працювати прийнятно (не кажучи вже про те, щоб змусити їх працювати швидко) на всіх пристроях, на яких передбачається запуск гри. Unity суттєво полегшує цей процес, але, на жаль, не вирішує всіх проблем.

Існує безліч статей, присвячених оптимізації Unity-ігор під мобільні платформи, так що тут на цю тему буде сказано небагато.

  • Якщо ви плануєте запуск на мобільних платформах та використовуєте тіні, то обмежтеся режимом forward lighting. Незважаючи на запікання освітлення та скорочення кількості об'єктів, що відкидають тіні, ми не змогли досягти прийнятної продуктивності в режимі deferred lighting. Можливо, ми недостатньо намагалися, але форуми Unity здебільшого солідарні з нами у цьому питанні.
  • Мінімізуйте кількість draw call-ів. Велика кількість полігонів у моделях не позначиться так сильно на продуктивності, як додаткові draw call-и. Ми планували велику оптимізацію, спрямовану на скорочення кількості draw call-ів, щоб краще підтримувати старі моделі мобільних пристроїв, але, на жаль, не змогли зробити її у відведені жорсткі терміни.
  • Не зловживайте текстурними вибірками у шейдерах. Це може призвести до значного падіння продуктивності. У нашій грі ми змушені були використовувати кілька спеціальних шейдерів замість одного універсального - саме з цієї причини.

Крім відмінностей у продуктивності та апаратних обмежень, існує ще одна важлива відмінність між стаціонарними та мобільними платформами. І ця відмінність – режим введення. Гра, створена для керування за допомогою клавіатури та миші, погано переноситься на мультитач та акселерометр. Ми переконалися у цьому на своєму гіркому досвіді. Насамперед, у Unity розділена обробка миші та мультитача. Тому було необхідно створити систему, що уніфікує цей аспект. Для цього ми використовували систему введення зі складу NGUI , яка, після невеликих доробок, показала себе дуже добре. Вона також дозволила нам вирішити проблему розподілу введення між інтерфейсом користувача і ігровим управлінням, яка доставляла нам деякі неприємності на той момент.

Інтерфейс користувача в цілому зажадав ряду модифікацій для коректної підтримки мобільних пристроїв. Наприклад, замість прокручування коліщатка миші та утримування кнопок довелося ввести мультитач-жести. Деякі модифікації можна було потенційно просити за допомогою готових рішень з Unity Assets Store. Але в нашому випадку це був простий pinch, а тому ми вирішили написати його за годину з нуля, замість витрачати дні на підключення та налагодження системи, яка «робить все і навіть більше».

Найбільше проблем викликало внутрішньоігрове управління. Ми почали з традиційного набору ASWD + мишу для керування персонажем та камерою, плануючи використовувати екранний джойстик на мобільних пристроях. Але все вийшло не зовсім так, як ми очікували: гра стала практично некерованою. Нам довелося терміново змінювати внутрішньоігрове керування, при цьому вносячи зміни навіть до ігрової механіки. Методом спроб та помилок ми зупинилися на point-n-click управлінні, яке на мобільних пристроях сприймається інтуїтивно.

Локалізація: що простіше, то краще

Якщо ви хочете досягти успіху гри у світовому масштабі, то, поза всяким сумнівом, її необхідно локалізувати. А локалізація – це ще одна частина розробки, яку інди-команда практично ніколи не може зробити самостійно. Це означає лише одне: за локалізацію доведеться заплатити.

Локалізовувати потрібно все, що має відношення до людської мови. Тобто тексти, мова, написи на текстурах - це має бути локалізовано. Такий процес дуже швидко може стати дуже трудомістким та дорогим. Тому вкрай важливо звести кількість контенту, що локалізується, до мінімуму.

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

Але мінімізація контенту, що локалізується, - це тільки початок. Наступний етап – підготовка самої гри до локалізації. Погана новина полягає в тому, що Unity (на момент написання цієї статті) не має вбудованих механізмів для цього. І хоча існує ціла низка спеціалізованих рішень в Unity Assets Store (наприклад, l2 Localization), ми вирішили використовувати систему локалізації, що у складі NGUI.

Система локалізації NGUI проста та зрозуміла у використанні. Вона побудована на основі одного CSV-файлу, що містить стовпчик для кожної мови. Наявність такого файлу дуже зручна для відправки рядків на переклад (для цього існує велика кількість спеціалізованих сервісів) та подальшої вставки перекладеної версії.

Написати

Всім привіт! Навчившись робити ігри на цьому движку, я хочу вас навчити тому-таки. По-перше нам знадобиться сама Unity3d, будь-який редактор 3D моделей і прямі руки, що ростуть із плечей.

1. Вивчення програми

Для початку, рекомендую встановити Monodevelop! Давайте розберемося, що таке Unity. Unity – мультиплатформне середовище розробки ігор. Саме через її простоту та зрозумілість кожен третій хоч раз робив на ній ігри.

Розгляньте скрін вище:

  • Сцена – ваша пісочниця для творчості.
  • Проект - тут знаходяться всі анімації та моделі, звуки та текстури.
  • Для встановлення моделей у верхньому тулбарі вибирайте Assets-Import New Asset. Також можна Assets-Import Package-Custom Package. У другому випадку пакет має бути розширення.unity.
  • Ієрархія – всі об'єкти на сцені. Там ви створюєте батьків для об'єкту. Просто перемістіть об'єкт до іншого в меню ієрархії, і він причепиться. У результаті вийде своєрідна папка.
  • Тулбар – список інструментів. Там можна ввімкнути 2D,3D режим.
  • Інспектор – характеристика об'єкта, там ви додаєте анімації, скрипти та інше. Там можна використовувати інструменти: переміщення камери, переміщення об'єкта, розтяжка, розворот об'єкта.


Зараз ви бачите меню об'єкта в ньому, ви можете додати анімацію, скрипти та інше.

Думаю, що із цим меню у вас не буде проблем.
Щоб створити будь-який об'єкт, клацніть.

Взагалі ми вивчили програму, незабаром можна буде вже писати свої ігри.

2. Створення найпростішої гри

Спочатку створимо територію Create-Terrain. Додаємо траву та дерева. Натиснувши на землю праворуч, з'явиться вікно вибираємо дерева, траву.

Також створіть гори та нерівності. Потім завантажуйте Characher controller pack у проект. Після чого шукаємо у вікні з проектом Standart assets-Characters controller і вибираєте вигляд від першої особи (капсула) або від третьої (механік).
Якщо перша особа, то просто ставте її на землю. Якщо ж від третього, треба завантажити анімацію. Також рекомендую встановити освітлення на сцені Create-Directional Light.

Щоб додати музику, перетягніть її на потрібний об'єкт.
Гра готова, але як її скомпілювати?

Для цього зайдіть у File-Build settings-player settings (для ярлика та назви). Вибираєте платформу та вуалю, готово. Для цього вам необхідно встановити Android SDK. Але там треба вказувати папку з SDK, причому треба не просто SDK, а саме API потрібного рівня (наприклад Android 4.2 - API 17). Наприклад, щоб гра була на Android 4.0+, треба встановити ці API.

У наступній статті я розповім, як настроїти керування під Android або iOS і навчимося писати скрипти самі.

Що ми збираємось робити? Двовимірну головоломку з колобком у ролі головного героя, який може рухати ящики, які можуть натискати кнопки, які можуть відчиняти двері, за якими ховається вихід із рівня, який побудував я. Або ви, у нас тут туторіал як-не-як.

Очевидно, що ви вже встигли завантажити Unity і погралися трохи в редакторі. Ні? Зараз саме час, я зачекаю.

Грубий малюнок


Я збрехав, я не чекатиму. Створюємо порожній проект без зайвих пакетів і вибираємо схему розташування вікон на свій смак, я використовуватиму Tall. Додаємо до ієрархії сферу, перетягуємо на неї головну камеру. Тепер камера йтиме за нашою сферою, якщо вона раптом захоче погуляти. Перейменовуємо сферу в «Player», перетягуємо в Project, тепер ми маємо prefab , який ми можемо використовувати в будь-яких нових сценах, якщо такі будуть. Не забувайте перевіряти координати префабів при створенні та використанні, якщо ми хочемо робити іграшку у двох вимірах, то третя вісь має бути виставлена ​​в нуль для всіх об'єктів, що взаємодіють.

Тепер додамо джерело світла, ліземо в меню GameObject -> Create Other -> Directional light. Його координати не мають значення, він висвітлюватиме наші об'єкти однаково з будь-якого місця. Однак, має сенс підняти його трохи над сценою, щоб не заважав виділення об'єктів, тому поставимо йому координати (0; 0; -10). До речі про сцену, вісь X у нас зростатиме зліва направо, Y - знизу вгору, а Z - від глядача вглиб екрану. Клацніть по стрілочкам навколо кубика в правому верхньому кутку сцени і поверніть її належним чином.

Додамо на сцену кубик, назвемо його Wall і перетягнемо в Assets. Самотня кубічна стіна поруч із сферичним колобком не дуже вражає, так? Чарівна комбінація клавіш Ctrl+D допоможе нам продублювати нашу стінку, а три поля Scale в інспекторі дозволять нам витягувати її як душі завгодно. Зрозумійте щось схоже на кімнату, підмогою буде затиснутий Ctrl, який обмежує переміщення об'єктів окремими інтервалами. Крім того, клавіша V дозволить тягати об'єкт за вершини, і вони липнуть до вершин інших об'єктів. Чудово, чи не так? І ви все ще пишете свій движок? Ну ну.


Збережіть сцену, натисніть Play і помилуйтеся своїм витвором кілька хвилин. Хороші гейм-дизайнери називають це тестуванням. Чогось не вистачає, так? Хмм. Можливо, якщо я помилуюсь ще трохи, то…

Скрипти та фізика

Нам потрібно більше руху та кольору! Хоча, якщо ваше суворе дитинство було наповнене бетонними іграшками, можна залишити все як є, ваше право.

Для початку потрібно прибратися в нашому проекті, якщо ми не хочемо потім заблукати в мішанині префабів та скриптів. Створимо папку «Levels», в якій ми зберігатимемо сцени та папку «Prefabs» для складування заготовок. Розсортуємо багатство, що накопичилося, за татками.

Тепер настав час для скриптів. Я наводитиму приклади на C#, але можна писати і на JS або Boo. Насправді вибирати останні два сенси не має, вони були додані в Юніті швидше як доважки, менше підтримуються, гірше розширюються і для них складніше знайти приклади. Особливо жахливий Boo, який по суті є unpythonic Python. Гидота. Віват, пітоністи!

Створюємо C# Script, називаємо його PlayerController, перетягуємо на префаб Player і відкриваємо за допомогою Visual Studio улюбленого редактора. Спершу потрібно потерти зайве сміття, залишимо тільки потрібне.

Using UnityEngine; Public class PlayerController: MonoBehaviour ( void Update() ( ) )

Функція Update викликається у кожному кадрі, що дуже зручно реалізації руху, всередині неї і розміщуватимемо код. Натискання кнопок гравцем можна отримати за допомогою класу Input. У комплекті з Unity йдуть чудові налаштування введення, достатньо написати Input.GetAxis («Horizontal») і ми вже знаємо, натиснув гравець на клавіатурі стрілку вправо чи вліво. Якщо у гравця підключений геймпад, він може керувати і з нього, нам навіть не треба писати зайвий код.

Var direction = новий Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0);

Такою нехитрою строчкою ми отримуємо інформацію про дії користувача і створюємо вектор руху. Для того, щоб вектор кудись прикласти, нам знадобиться Rigidbody . Виділяємо префаб Player і через меню Component -> Physics -> Rigidbody додаємо потрібний компонент. Тепер ми можемо на нього посилатися у нашому скрипті.

Rigidbody.AddForce(direction);

Для початку просто перевіримо, як працюють тригери. Напишемо щось у консольку Unity. Функція Debug.Log дуже корисна, окрім тексту, вона також вміє друкувати різні ігрові об'єкти.

Using UnityEngine; Public class Button: MonoBehaviour ( void OnTriggerEnter(Collider other) ( Debug.Log("Hello"); ) void OnTriggerExit(Collider other) ( Debug.Log("Habr!"); ) )

Кинули кнопку на сцену. Потестували? Йдемо далі. Було б наочніше, якби наша кнопка змінювала колір при натисканні. Для кольору нам потрібно прикріпити до кнопки матеріал. Create -> Material, назвемо його "Button Mat" і накинемо на кнопку. У якості матеріалу виберемо для Main Color зелененький. Тепер у скрипті ми можемо звертатися до кольору матеріалу за допомогою renderer.material.color та змінювати його як заманеться. Змусимо кнопку червоніти від входження до неї нашого колобка. Якось пішло вийшло.

Using UnityEngine; Public class Button: MonoBehaviour ( void OnTriggerEnter(Collider other) ( renderer.material.color = new Color(1, 0, 0); ) void OnTriggerExit(Collider other) ( renderer.material.color = new Color(0, 1, 0);

А можна це не виправляти. Особливості ігрового двигуна також можуть бути частиною естетики. Quake 3 без розстрибувань був зовсім іншим. Саме знання тонкощів механіки відрізняє новачків від літаючих демонів-вбивць професійних гравців. Але тонкощі не повинні шкодити зручності, тому ми раніше поміняли Drag у Rigidbody гравця на четвірку. Таке тертя змушує колобка швидко зупинятися, але не відразу. А велике прискорення дає почуття контролю. В ідеалі, старт теж має відбуватися не відразу, це знадобилося б для точних маневрів. Ці дрібні деталі механіки впливають на загальну естетику.

Камера дає гравцеві можливість заглянути в ігровий світ, тому від її ракурсу та поведінки теж багато залежить. Зараз наша камера просто бовтається повітряною кулькою над головним героєм, але якщо її трохи нахилити, то нам буде легко сприймати рівень, з'явиться відчуття перспективи. Або ми можемо навпаки поміняти камеру на ортогональні, тоді все буде абсолютно плоске.


Зовнішній вигляд гри також має велике значення. Під зовнішнім виглядом я маю на увазі не кількість полігонів у кадрі. Пам'ятайте, ігри – це мистецтво. Які речі важливі у суміжних видах мистецтва? Стилістика, колір, світло, тінь. Спробуйте знайти цікаве поєднання кольорів або зберіть свій набір. Подивіться наприклад на Proun. Ця гра виконана на кшталт супрематизму, так близького хабру. Можна спробувати скопіювати деякі колірні рішення, але без текстур та чаклунства з шейдерами вийде не так гарно. Нетерплячі вже переглянули результат моєї спроби з посиланням нагорі, а уважні читачі можуть побачити їх ще раз наприкінці статті.

Суть цього розділу в наступному: навіть якщо ви робите лише прототип гри, одразу варто подумати про те, що ви хочете сказати майбутньому гравцю, які почуття викликають у ньому. Це справедливо всім видів мистецтв. Зробити мінімальний малюнок стилістики зовсім не складно, і це окупиться в першу чергу для вас, вам буде легше вибрати подальший напрямок.

Висновок

За допомогою примітивних кубиків і пари крапель кольору, можна виготовити цілком стерпний прототип, в який (на мою скромну думку) буде приємно грати. Використовуючи Unity це зробити зовсім не складно, але не можна забувати, навіщо вам це все потрібно.

Посилання

Версія прототипу зі статті

У першому розділі ви знайдете основну інформацію щодо завантаження та встановлення 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 движок для візуалізації сцени. Малюнок вище це демонструє наочно.

У наступному уроці:

Ви тільки-но дізналися, як створити простий статичний фон і як відобразити його належним чином. Потім ми навчили вас, як зробити прості спрайти. У наступному розділі ми дізнаємося, як додати гравця та його ворогів.

КАТЕГОРІЇ

ПОПУЛЯРНІ СТАТТІ

2023 «kingad.ru» - УЗД дослідження органів людини