Основи програмування в Unity. Курс Unity для митців (11-13 уроки)

Всіх вітаю! Це 11-13 уроки курсу — Unity Essentials (Основи Unity), і третій розділ другого блоку «Досліджуйте Unity». Цей розділ допоможе Вам зрозуміти у чому полягають основні завдання Unity програміста. Але ці знання також можуть бути корисними в будь-якій іншій ролі, коли Ви працюєте з Unity. Хоча багато завдань у Unity не вимагають програмування, Вам може бути корисно пройти цей розділ.

У туторіалах цього розділу Ви створите простий сценарій (script) і додасте його до GameObject як компонент. Ви познайомитеся з інтегрованим середовищем розробки (IDE). Ви зміните GameObject за допомогою script, щоб отримати уявлення про можливості написання scripts для ваших власних проектів.

Попередні уроки

Курс розроблений компанією Unity, перекладений і адаптований для проєкту «Марсіанський Чайник». Деякі терміни навмисно не перекладені в уроці для того, щоб Вам було легше орієнтуватись у редакторі Unity. Підтримати проєкт можна на сторінці патреон Марсіанський Чайник.

Почніть роботу зі scripts

Відеоверсія уроку:

У попередніх туторіалах Ви додали компоненти до GameObjects, щоб змінити їх властивості та поведінку. На додаток до використання компонентів, наданих у редакторі Unity, Ви можете налаштувати властивості та поведінку GameObjects, написавши спеціальні scripts мовою C#.

У цьому туторіалі Ви створите простий компонент «Hello World» і додасте його до GameObject. Ви побачите, як можна використовувати scripts, щоб маніпулювати будь-яким GameObject. Попутно ви дізнаєтеся про інструменти та вікна, які використовуються для програмування в Unity.

Інтегровані середовища розробки (IDE)

Інтегровані середовища розробки (IDE), такі як Visual Studio і Rider, дозволяють програмістам писати та налагоджувати (debug) код максимально ефективно. IDE підтримують програмування на широкому діапазоні мов (наприклад, C#, Java, Javascript, Python тощо); Розробка Unity, як правило, виконується на C# (вимовляється як «see sharp») за допомогою Visual Studio.

Технічно можливо написати код у простому текстовому документі, але IDE надають розробникам набір інструментів для полегшення програмування. Наприклад, більшість IDE включають виявлення помилок (error detection), коли щось закодовано неправильно, налагоджувач (debugger), щоб допомогти знайти джерело помилки, підсвічування синтаксису (syntax highlighting), щоб зробити код легшим для читання, і дописування коду (code completion) для миттєвого заповнення рядків коду.

Unity постачається в пакеті з Visual Studio та інтегрується з Visual Studio, щоб зробити кодування та debugging набагато простішими, ніж це було б у повністю окремій IDE.

Перевірте свою IDE

Visual Studio зазвичай встановлюється як модуль під час початкової інсталяції Unity. Виконайте ці кроки, щоб налаштувати свою IDE на Visual Studio, і, якщо необхідно, встановіть модуль Visual Studio Community за допомогою Unity Hub. Хоча Unity може підтримувати інші IDE, цей туторіал базується на Visual Studio. Ви також можете виконати ці інструкції, щоб підключити іншу IDE до редактора Unity.

Щоб змінити IDE по дефолту, має бути відкритий екземпляр редактора Unity. Відкрийте вже існуючий проект Unity або створіть новий через Hub. Зміна IDE буде застосовано до всіх інших проектів Unity автоматично, які використовують цю версію Unity.

Переконайтеся, що жоден із scripts у проекті наразі не відкритий.

Встановіть свою IDE

У вікні Preferences розміщено більшість налаштувань, що стосуються редактора Unity. Зміни, внесені тут, не змінять жодної частини вашого проекту Unity, а змінять те, як саме Unity взаємодіє з вашими проектами та з Вами як користувачем. Тут Ви можете встановити вибрану IDE.

Щоб встановити Visual Studio Community як свою IDE:

1. У верхньому меню виберіть Edit > Preferences, щоб відкрити вікно.

2. На навігаційній панелі вікна Preferences виберіть External Tools.

3. Знайдіть параметр External Script Editor (у верхній частині вкладки External Tools). По дефолту встановлено значення Open by file extension.

4. Якщо ви завантажили та встановили Visual Studio Community разом із інсталяцією редактора, скористайтеся спадним меню, щоб вибрати його зараз. Це встановить Visual Studio як IDE по дефолту для редагування script.

Примітка: Якщо ви хочете встановити альтернативне програмне забезпечення як IDE по дефолту, Вам може знадобитися вибрати Browse..., щоб знайти та додати вашу IDE до списку за допомогою провідника файлів вашого комп’ютера. Після того, як Ви знайдете програмне забезпечення, Ви можете вибрати його за допомогою спадного меню.

5. Закрийте вікно Preferences. Коли Ви відкриєте скрипт із Unity, він відкриється для редагування у вибраній вами IDE.

Створіть новий script

Давайте створимо ваш перший script.

1. Відкрийте 3D-проект, який Ви створили для Challenge: The Floor is Lava! У Вас буде можливість додатково налаштувати цей проект за допомогою scripting.

2. Створіть новий порожній GameObject у сцені, клацнувши правою кнопкою миші в ієрархії та вибравши Create Empty.

3. Змініть назву нового GameObject на ScriptObject за допомогою вікна Інспектора.

4. Поки ваш новий об’єкт гри все ще вибрано, виберіть Add Component у вікні Inspector. Виберіть опцію New Script.

5. Типовим першим уроком програмування є «Hello, World!», — вправа, яку ми і виконаємо з цим новим script. Назвіть новий script HelloWorld і натисніть кнопку Create and Add.

6. Тепер script додано до порожнього GameObject як компонент, і він також тепер з’явиться в папці Assets вашого проекту.

7. Двічі клацніть на новий script, щоб відкрити його у Visual Studio.

Ви готові почати кодування нового script компонента, який приєднано до порожнього GameObject.

Код у default script

Відеоверсія уроку:

Кожного разу, коли Ви створюєте новий script, Unity починає роботу з default script, який містить основні рядки коду, які вам знадобляться. У цьому туторіалі ми зробимо огляд default script і напишемо деякий код.

Default script

Коли Ви створюєте новий script, Ви також створюєте новий public class, який є похідним від вбудованого класу (class) під назвою MonoBehaviour. Коли Ви назвали компонент, те саме ім’я було застосовано до цього класу та імені файлу вашого сценарію. Важливо, щоб ці назви збігалися.

У коді Ви побачите вже налаштований public class. Він називається «HelloWorld», так само, як назва script. Ці назви завжди повинні бути однаковими — якщо ви змінюєте назву script, Ви також повинні змінити назву цього класу.

Сценарій також містить дві функції: Start() і Update().

Функція Start запускається один раз на початку гри, а функція Update — на кожному кадрі (frame) гри (докладніше про frames я розповім пізніше).

Відредагуйте функцію Start

1. Додайте такий код до функції Start між двома дужками {}:

Debug.Log("Hello World");

2. Збережіть script за допомогою Ctrl+S (Windows) або Cmd+S (Mac).

3. Якщо вікно Console не відображається в редакторі Unity, відкрийте його за допомогою Ctrl+Shift+C (Windows) або Cmd+Shift+C (Mac). У вікні Console ви можете читати повідомлення зі script, включаючи помилки та попередження, під час виконання сценарію.

4. Запустіть гру та подивіться на вікно Console. Там з’явиться повідомлення «Hello World».

Відредагуйте функцію Update

1. Знову відкрийте script і перемістіть рядок Debug.Log до функції Update.

2. Збережіть script за допомогою Ctrl+S (Windows) або Cmd+S (Mac).

3. Виберіть опцію Collapse у вікні Console, якщо вона ще не вибрана. Ця опція спростить відображення під час наступного кроку.

4. Запустіть гру та подивіться на вікно Console. Цього разу поруч із повідомленням «Hello World» з’явиться лічильник. Цей лічильник показує, скільки разів сценарій запускався і відображав повідомлення.

Оскільки скрипт тепер знаходиться всередині функції Update, він виконується один раз для кожного кадру (frame) гри. Frame — це одне зображення в серії зображень, як кадр кіноплівки, який є елементом фільму. Коли Ви натискаєте кнопку Play, і переглядаєте гру в режимі Game view, функція Update запускається багато разів безперервно.

Додайте властивість зі змінною

Щоб продемонструвати концепцію компонентів для сценаріїв, Ви додасте змінну (variable) до свого script та зміните її значення у вікні Inspector. Змінна містить значення, яке може змінюватися. Типи значень, які Ви найімовірніше зустрінете, це int (цілі числа), float (числа з плаваючою комою, тобто числа, які можуть мати десяткові), string (текст) і Boolean (істинні (true) чи хибні (false) значення). У використовуваних вами компонентах Transform числові значення для Scale X, Y і Z є змінними. У своєму script Ви заміните «Hello, World!» — повідомлення з рядковою змінною (яку можна змінити у вікні інспектора за допомогою компонента HelloWorld). Через цю змінну ваш GameObject матиме властивість, якою Ви зможете керувати з редактора Unity.

1. Знову відкрийте script у Visual Studio.

2. Додайте нову змінну, як показано нижче:

public string myMessage; 

3. Змініть команду Debug.Log таким чином:

Debug.Log(myMessage);

4. Збережіть скрипт (Ctrl+S/Cmd+S).

5. У редакторі Unity виберіть ігровий об’єкт ScriptObject і подивіться на компонент HelloWorld в Inspector. З’явиться нова властивість, де Ви можете ввести власне повідомлення.

Введіть повідомлення на ваш вибір.

6. Запустіть гру та перевірте вікно Console. Має з’явитися ваше власне повідомлення!

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

Змініть GameObject за допомогою сценарію

Відеоверсія уроку:

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

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

Тут ви будете використовувати сценарії, щоб змінити розмір кульки у вашому проєкті «The floor is lava!». Кулька буде збільшуватися, коли вона котиться вниз. Ми також покажемо Вам, як змінити положення та обертання, якщо Ви хочете більше експериментувати самостійно.

Створіть свій сценарій (script)

1. Виберіть GameObject вашої кульки.

2. Так само, як Ви зробили в попередньому туторіалі, додайте новий сценарій до вашого GameObject. Назвіть новий сценарій BallTransform і двічі клацніть по ньому в папці Assets (вікно Project), щоб відкрити його у Visual Studio.

Порада: Ви можете закрити вікна з правого боку в IDE.

Збільште масштаб

Щоб кулька збільшувалась, ми додамо їй властивість Scale у кожному кадрі. Ви можете експериментувати з тим, наскільки збільшити її в кожному кадрі, налаштувавши властивості компонента у вікні Inspector.

Для цього ми ініціалізуємо public змінну, щоб змінювати значення Scale у вимірах X, Y і Z. Потім ми додамо ці значення до властивості Scale кульки в кожному кадрі.

1. Між початковою дужкою оператора класу та коментарем до методу Start() додайте цей рядок, щоб ініціалізувати змінну з назвою scaleChange:

public Vector3 scaleChange;

Це public змінна, тому вона відображатиметься в Inspector. Тип змінної, Vector3, є типом даних для зберігання трьох значень (X, Y, Z).

2. У методі Update() розпочніть новий рядок і введіть:

transform.

Це посилання до компонента Transform вашого GameObject. Коли Ви введете крапку, Ви побачите спливаюче вікно з усіма властивостями та методами компонента Transform.

4. Введіть або виберіть localScale, а потім заповніть цей рядок коду таким чином:

transform.localScale += scaleChange;

Примітка: якщо localScale не є опцією у спливаючому меню, переконайтеся, що Visual Studio налаштовано як ваш IDE.

Оператор += додасть значення в scaleChange до поточних значень масштабу GameObject, щоб кулька зростала.

5. Збережіть свій сценарій за допомогою Ctrl+S/Cmd+S.

Кінцевий результат буде виглядати так:

Експериментуйте з масштабом

1. Поверніться до редактора Unity і виберіть кульку. У Inspector Ви побачите компонент BallTransform.

Зверніть увагу, як Unity автоматично перетворює ім’я змінної scaleChange в сценарії на Scale Change в Inspector. Ви можете скористатися цією функцією, завжди використовуючи camelCase для своїх загальнодоступних змінних.

Примітка: Верблюдячий регістр (CamelCase) — стиль написання складових слів, у якому декілька слів пишуться разом без пробілів, при цьому кожне слово пишеться з великої літери. Якщо ж перша літера є малою, то це нижнійВерблюдячийРегістр (lowerCamelCase).

2. Введіть 0,1, 0,1, 0,1 як значення Scale Change та перейдіть у Play mode. Ваша кулька повинна рости дуже швидко — можливо, навіть швидше, ніж Ви бачите!

3. Подивіться на Scale у компоненті Transform під час виконання сценарію, щоб побачити фактичний масштаб у міру його збільшення.

4. Враховуючи поточні властивості масштабу вашої кулі, як показано в компоненті Transform, подумайте, наскільки змінити масштаб у кожному кадрі. Ваш комп’ютер може відображати 60 кадрів в секунду або навіть тисячі! Чим більше ваша куля виростає за одну секунду, тим потужніший ваш ПК. На основі власних результатів поекспериментуйте з деякими дуже маленькими числами (наприклад, 0,01 або навіть 0,001) і натисніть кнопку Play, щоб перевірити їх.

5. Було б краще, якби Scale Change дозволяв регулювати зміни за секунду замість змін за кадр. Unity Scripting API надає значення Time.deltaTime для визначення часу між кадрами в секундах. Щоб використовувати це значення, змініть цей рядок коду таким чином:

transform.localScale += (scaleChange * Time.deltaTime);

6. Увійдіть в Play mode, щоб перевірити, і помітите різницю! Експериментуйте з різними швидкостями, змінюючи значення Scale Change в Inspector.

7. Ось інші речі, які можна спробувати:

  • Коли кулька стає занадто великою? Спробуйте відрегулювати поверхні, на які вона котиться, щоб пристосувати їх до більшого розміру кульки.
  • Використовуйте різні числа для трьох значень Scale Change і дивіться, як ваша кулька перетворюється на витягнутий сфероїд, який падає, а не котиться.
  • Чи є інші ігрові об’єкти, які Ви можете збільшити?

Спробуйте більше трансформацій

Ось кілька рядків коду, які можна використовувати, щоб змінити обертання (rotation) та положення (position) GameObjects так само, як ми змінили масштаб. Спробуйте їх на GameObjects у своєму проекті, щоб зробити свою смугу перешкод цікавішою.

Increment position

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TrackPosition : MonoBehaviour
{
    public Vector3 positionChange;
    // Start is called before the first frame update
    void Start()
    {
        
    }
    // Update is called once per frame
    void Update()
    {
        transform.position += (positionChange * Time.deltaTime);
    }
}

Increment rotation

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlatformRotate : MonoBehaviour { 
    public Vector3 rotateChange;
    // Start is called before the first frame update
    void Start()
    {
    
    }
    // Update is called once per frame
    void Update()
    {
        transform.Rotate (rotateChange * Time.deltaTime); 
    }
}

Примітка: сценарій збільшення обертання дещо інший. Метод Rotate() додає до обертання GameObject, тоді як інші сценарії змінюють властивості, які обчислюються в сценарії за допомогою оператора +=.

Інші ресурси для програмування

Ви тільки почали відкривати можливості написання сценаріїв у Unity. Якщо ви новачок у програмуванні та хочете дізнатися більше, пройдіть курс Junior Programmer Pathway (якій з’явиться на каналі трохи пізніше, і буде адаптований для тих, хто не знає основ С#) після того, як ви закінчите Unity Essentials.

Хоча програмування — це корисна навичка для розробки проектів зі складною інтерактивністю в Unity, не обов’язково бути програмістом, щоб створювати проєкти за допомогою Unity. Наприклад:

  • Деякі типи проектів, наприклад 3D-візуалізації та анімації, взагалі не потребують коду.
  • Такі ресурси, як Bolt для «візуальних сценаріїв» (visual scripting), дозволяють розробникам впроваджувати ігрову логіку у свої проекти, використовуючи інтуїтивно зрозумілі графічні елементи без будь-яких знань про код або IDE.
  • Unity Asset Store надає готові сценарії та інструменти для розробки загальних функцій, таких як контролер від першої особи або система «інвентар».
  • Використовуючи Google у поєднанні з такими сайтами, як Unity Answers, Unity Forums, і Stack Overflow, розробники можуть копіювати, вставляти та змінювати код, наданий іншими розробниками.

Цей розділ дав Вам лише коротке введення в сценарії Unity. Ви розширили свій проект за допомогою сценаріїв: Ви дізналися про default script і його методи: Start() і Update(), а також Ви отримали уявлення про Unity Scripting API, використовуючи код для зміни компонента Transform GameObjects.

Підписуйтеся на Telegram-канал @gamedev_dou, щоб не пропустити найважливіші статті і новини про геймдев

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному2
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі