5.90M
Category: informaticsinformatics

Розробка гри жанру «Action-platformer» з використанням Unity та штучного інтелекту

1.

Магістерська робота на тему:
Розробка гри жанру «Action-platformer» з
використанням Unity та штучного інтелекту
Виконав: Федчук Максим Юрійович
студент ННІАКОТ
Група: КН-61м
Керівник: доцент Бачишина Лариса Дмитрівна

2.

Актуальність роботи полягає в тому, що поєднання елементів гри
жанру "Action-platformer" та штучного інтелекту відкриває широкі
можливості для розвитку інтерактивних віртуальних середовищ.
Останні роки спостерігається зростання інтересу до використання
штучного інтелекту в галузі розробки відеоігор, що дозволяє
створювати більш складні, глибокі та захопливі ігрові досвіди.
Метою цієї роботи розробка 2D гри жанру екшн-платформер з
використанням штучного інтелекту.

3.

Платформери
Платформер — жанр відеоігор, ігровий процес в
Особливості Геймплею:
якому складається зі стрибків персонажа по
Складність та Рівні: Грати в платформери може
різноманітним платформам та через перешкоди,
бути викликом через різноманітні перешкоди, які
збирання предметів, зазвичай необхідних для
гравець повинен подолати. Різні рівні надають
проходження рівня.
гравцеві нові виклики та завдання.
Стрибки
та
Подолання
Висот:
Основна
механіка — стрибки, які можуть варіюватися від
простих до складних, включаючи стрибки через
ворота, виноси платформ, тощо.
Збір Об'єктів та Бонусів: Гравці часто збирають
різні предмети чи бонуси, що додають балів або
покращують навички героя.

4.

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

5.

Unity Machine Learning
Agents
ML-Agents (Machine Learning Agents) - це відкритий
інструментарій, розроблений компанією Unity Technologies,
призначений для розвитку інтелектуальних агентів у
віртуальному середовищі за допомогою методів машинного
навчання
(ML).
Основна ідея ML-Agents полягає в тому, щоб навчити
віртуальних агентів приймати відповідальні рішення та
взаємодіяти зі оточуючим віртуальним середовищем.

6.

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

7.

Основні етапи роботи з ML-Agents
• Встановлення Unity ML-Agents
• Створення середовища
• Створення агентів
• Налаштування моделі
• Визначення винагород та завдань
• Тренування моделі
• Оцінка результатів
• Впровадження

8.

Приклад одного із етапів тренування
агентів в середовищі

9.

Приклад одного із етапів тренування
агентів в середовищі

10.

Результати одного із тренувань

11.

Гра «Action-platformer»
Гра розроблена у піксельному стилі у 2D. Гравець бере на
себе управління персонажем, жінкою-воїном. Завданням є
пройти складний рівень, долаючи ворогів і використовуючи
стратегію, щоб уникнути хитрих пасток, якими сповнений
кожен куток ігрового світу. Гравець має володіти не тільки
майстерністю у бою, але й витонченим чуттям взаємодії з
навколишнім середовищем, оскільки навколо неї чекає
безліч викликів та небезпек. Перед гравцем розкривається
захоплива піксельна графіка, яка створює атмосферу
пригодницьких веселощів, та чудовий саундтрек.

12.

Головне меню та
меню опцій

13.

Початок та кінець рівня

14.

Вороги та різні пастки

15.

Вікно паузи та повідомлення
про смерть

16.

Розробка управління персонажем
Отримання введених значень:
HorizontalMove = Input.GetAxisRaw("Horizontal") *
speed;: Отримання значень горизонтального вводу від
користувача і масштабування його за швидкістю руху
персонажа.
Рух:
• Vector2 targetVelocity = new Vector2(HorizontalMove * 10f,
rb.velocity.y);: Визначення цільової швидкості персонажа вздовж
вісі X.
rb.velocity = targetVelocity;: Встановлення швидкості руху персонажа.
•Перевірка стану на землі:
if (isGrounded) { jumpsRemaining = maxJumps;
isJumping = false; }: Перевірка, чи персонаж перебуває
на землі, і скидання кількості залишених стрибків, якщо це
так. Також встановлення стану стрибка в false.
Переворот:
• if (HorizontalMove < 0 && FacingRight) { Flip(); } else if
(HorizontalMove > 0 && !FacingRight) { Flip(); }: Перевірка напрямку
руху і обертання персонажа, якщо напрямок змінився.
•Стрибок:
if
(jumpsRemaining
>
0
&&
Input.GetKeyDown(KeyCode.Space) && !isJumping) { ...
}: Перевірка, чи є залишені стрибки, чи була натиснута
клавіша простору і чи персонаж не в стані стрибка. Якщо
умова виконується, то відбувається стрибок.
•Анімація:
animator.SetFloat("HorizontalMove",
Mathf.Abs(HorizontalMove));:
Передача
горизонтального руху в аніматор для
анімацією персонажа.
значення
управління
animator.SetBool("Jumping",
!isGrounded);:
Встановлення параметра аніматора "Jumping" в true,
якщо персонаж не на землі, тобто в стані стрибка.
Метод Flip():
• private void Flip() { ... }: Змінює напрямок обличчя персонажа,
використовуючи зміну знаку масштабу по осі X.
Метод CheckGround():
• private void CheckGround() { ... }: Викликається для перевірки, чи
персонаж
перебуває
на
землі
шляхом
використання
Physics2D.OverlapCircleAll для області під ногами персонажа.

17.

Скрипт здоров'я персонажа
Змінні:
maxHealth: Максимальне значення здоров'я гравця.
currentHealth: Поточний рівень здоров'я гравця.
knockbackForce: Сила відштовхування, яка застосовується
при зіштовхуванні з певними об'єктами.
healthBar: Зображення шкали здоров'я на екрані.
uiManager: Посилання на інший скрипт (UIManager), який
управляє інтерфейсом користувача.
animator: Посилання на компонент Animator для керування
анімацією гравця.
rb: Посилання на компонент Rigidbody2D гравця.
Метод UpdateHealthBar():
Оновлює шкалу здоров'я на основі поточного і максимального
значень здоров'я гравця.
•Метод TakeDamage(int damage):
Наносить гравцеві шкоду, оновлює шкалу здоров'я та викликає
метод Die(), якщо гравець мертвий.
•Метод OnTriggerEnter2D(Collider2D other):
Викликається при зіткненні гравця з іншим об'єктом.
Перевіряє, чи об'єкт має тег "TrapSpikes" і, у випадку
позначеного об'єкта, наносить гравцеві шкоду та застосовує
силу отталкивання.
•Метод Start():
Ініціалізує початкові значення здоров'я і отримує компонент
Rigidbody2D.
•Метод IsDead():
Повертає значення true, якщо поточне здоров'я менше або
дорівнює нулю, інакше - false.
•Метод Update():
Перевіряє натискання клавіші "Y" (це тимчасове умовне
навантаження для тестування) і наносить гравцеві шкоду при
виконанні цієї умови.
Перевіряє, чи гравець мертвий, і, у разі смерті, викликає метод
Die().
•Метод Die():
Виводить повідомлення про смерть гравця в консоль.
Викликає метод ShowDeathPanel() з uiManager.
Вимикає об'єкт гравця.

18.

Атака головного персонажа
Змінні:
animator: Посилання на компонент Animator для управління
анімацією атаки гравця.
attackPoint: Точка атаки гравця, визначена у вигляді
позначення в інтерфейсі Unity.
enemyLayers: Шари, які визначають, що вважати ворогами
для атаки гравця.
attackRange: Радіус атаки гравця.
attackDamage: Кількість шкоди, яку гравець завдає при
атакуванні ворога.
attackRate: Частота атаки в атаках за секунду.
nextAttackTime: Час наступної доступної атаки.
•Метод Update():
Перевіряє, чи настала наступна доступна атака з урахуванням
частоти атаки.
Якщо гравець натиснув клавішу "R" і відповідний інтервал часу
пройшов, гравець викликає метод Attack().
Метод Attack():
Викликає анімацію атаки шляхом встановлення тригера
"Attack" у компоненті Animator.
Використовує
Physics2D.OverlapCircleAll
для
визначення всіх ворогів у заданому радіусі навколо точки
атаки.
Застосовує шкоду всім виявленим ворогам, викликаючи метод
TakeDamage(attackDamage) у їхніх компонентах Enemy.
•Метод OnDrawGizmosSelected():
Візуалізує радіус атаки у вигляді дротяної сфери навколо точки
атаки у сцені Unity.

19.

Анімації головного героя

20.

Анімації ворога

21.

ДЯКУЮ ЗА
УВАГУ!
English     Русский Rules