День 8: Від прототипу до гри — моя перша працююча 2D-гра

Тепер я створив ворога і призначив йому унікальний матеріал. Ми перетворимо його на префаб, оскільки він буде інстанційований так само, як і лазер.

pic

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

pic

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

pic

OnCollisionEnter vs OnTriggerEnter

💥 OnCollisionEnter: Коли ви хочете, щоб об'єкти фізично взаємодіяли (відскакували, зупинялись або штовхали один одного). 🚀💫

🎯 OnTriggerEnter: Коли ви хочете виявити перекриття без фізичних взаємодій (як тригери для контрольних точок, підсилювачів або предметів для збору).✨🛑

pic

У цьому випадку я використав OnTriggerEnter!

Я додав систему життів гравця та шкоди до гри. Тепер ворог завдає шкоди гравцеві при зіткненні, знижуючи його кількість життів. За допомогою GetComponent, я отримав доступ до методу Damage гравця для застосування цього ефекту. Це гарантує, що ворог взаємодіє з компонентами гравця динамічно і лише коли це необхідно.

pic

Мій гравець тепер починає з 3 життями. Коли всі 3 життя втрачені, гравець зникає з гри за допомогою методу Destroy(), що повністю видаляє об'єкт гравця та його компоненти.

Тепер я ввів менеджер спауну. Я створив порожній GameObject, розташований у точці (0, 0, 0), і прикріпив до нього скрипт для управління його поведінкою.

pic

Я ввів рутину спауна для ворога, використовуючи IEnumerator під назвою SpawnRoutine. Ця рутина використовує цикл while, щоб створювати ворога кожні 5 секунд на випадковій горизонтальній позиції. У методі Start я викликаю StartCoroutine, щоб постійно виконувати рутину під час гри.

pic

І тепер новий ворог з'являється кожні 5 секунд!

Я організував код, введши контейнер ворогів у менеджер спауну. Контейнер є батьківським GameObject, який утримує всіх створених ворогів, що дозволяє зберігати ієрархію чистою та зручною в огляді сцени Unity. Коли новий ворог інстанціюється в рутині спауна, він автоматично встановлюється як нащадок контейнера ворогів за допомогою transform.parent. Це полегшує організацію та контроль всіх об'єктів ворогів під час гри.

pic

Зверніть увагу, як контейнер ворогів тепер утримує всі префаби ворогів, зберігаючи ієрархію організованою та акуратною!

Я додав систему, яка припиняє спаун ворогів, коли гравець помирає. Це досягається викликом методу OnPlayerDeath у менеджера спауну, коли життів гравця стає нуль. Менеджер спауну використовує цей метод для зупинки рутини спауна, гарантуючи, що після знищення гравця нові вороги не створюються.

pic

Тепер, коли гравець мертвий, система спауна зупинилась, забезпечуючи, що більше не з'являться нові вороги.

🎮 Продовжуємо! 🚀 Я імпортував необхідні активи для того, щоб перетворити наш 3D-прототип на повноцінну 2D-гру! 🖼️🎨

pic

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

Тепер давайте переключимо наш проект у 2D-режим, натиснувши кнопку перемикача 2D-режиму на панелі інструментів перегляду сцени.

pic

Я додав фон туманності до нашої гри! Використовуючи інструмент Rect Tool, я розтягнув спрайт фону так, щоб він ідеально підійшов до екрану гри, покращуючи візуальне сприйняття.

pic

Тепер я перетворив наш 3D-гравець на справжній 2D-спрайт. Я також подбав про правильну організацію шарів, призначивши гравцю шар сортування 1 (передній план) і фону шар сортування 0 (фон).

pic

Ворог був перетворений на 2D, і я додав бокс-коллайдери до як гравця, так і до ворога для визначення їхніх хитбоксів. Оскільки це тепер 2D-гра, я оновив OnTriggerEnter до OnTriggerEnter2D і замінив посилання на коллайдери на Collider2D для правильної 2D-детекції зіткнень. Гравець все ще має 3 життя і знищується при їх втраті після того, як його вразить ворог.

pic

pic

pic

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

pic

Перекладено з: Day 8: From Prototype to Playable — My First Working 2D Game

Leave a Reply

Your email address will not be published. Required fields are marked *