Продолжаем создавать свою первую компьютерную игру. Если вы только подключились, все что вам необходимо - изучить внимательно материалы предыдущих уроков.
Содержание всех постов:
- Вступительный пост
- Обучение разработке на Unity3D. Установка, настройка и описание окон
- Обучение разработке на Unity3D. Написание небольшого шутера. Разбираемся с террейном.
- Онлайн-обучение. Урок 3. Разработка игр на Unity3D: создание персонажа
- Онлайн-обучение. Урок 4. Разработка игр на Unity3D: продолжаем создавать персонажей
- Онлайн-обучение. Урок 5 Разбор скрипта Enemy
- Онлайн-обучение. Урок 6 Учимся стрелять
Сегодня мы добавим жизней врагам, добавим индикатор жизней, научим наше оружие наносить урон, а не только взрываться, а так же сделаем эффект смерти для Enemy. Поехали!
Добавим в скрипт Enemy дополнительную переменную, которая будет хранить количество жизней:
Теперь научим наше оружие наносить урон врагам. Изменяем скрипт Bullet:
Теперь мы уже можем убивать нашего врага, но это никак не видно визуально.
Давайте добавим индикатор жизней. Для этого мы будем использовать Canvas. Добавим его внутрь одного из врагов на сцене. Делается это через нажатие ПКМ на Enemy объекте на сцене и выбором UI -> Canvas.Теперь нам нужно указать тип Канваса. Так как это буде индикатор жизней и он будет двигаться вместе с врагом по сцене, нам надо выбрать режим рендеринга World Space. Так же надо уменьшить scale и настроить ширину и высоту полоски с жизнями. Так же нужно подтянуть Канвас так, чтобы он был над врагом.
Теперь добавляем UI элемент внутрь Canvas под названием Image (UI -> Image), который настроим так, как на скриншоте. Это позволит нам с помощью изменения scale этого Image, изменять длину полоски.
Сразу же, по традиции, изменим цвет Image на зеленый. Так же нужно добавить дополнительное поле в скрипт Enemy, чтобы хранить в нем ссылку на Image:
Теперь нужно перетащить Image в новое поле Enemy. Сразу же задаем стартовое количество жизней. Я поставил 300:
Обновим теперь метод HitEnemy в скрипте Enemy, чтобы полоска с ХП обновлялась соответственно с текущим количеством ХП:
Теперь выберем префаб Bullet и добавим урона в поле Damage:
Почти все готово. Теперь при запуске, когда мы будем попадать по врагу, мы будем наносить ему 50 урона. При стартовом количестве ХП 300 надо попасть 6 раз по врагу, чтобы его убить. Нам осталось только сделать эффект смерти врага, так как сейчас после убийства ничего не происходит и никак не влияет на врага - он все равно продолжает двигаться на игрока. Добавляем ссылку на эффект смерти вот так:
А так же изменяем метод Die:
Осталось только выбрать эффект смерти. Я взял EffectExamples/FireExplosionEffects/Prefabs/BigExplosionEffect:
Готово. Можно запустить и посмотреть что получилось. Нужно проделать те же манипуляции с Enemy2. Так же, чтобы обновить префаб после изменения (добавления Canvas и т.д.) нужно выбрать префаб на сцене и нажать Apply в инспекторе:
После этого индикатор с ХП появится у всех Enemy на сцене, которые были созданы из этого префаба, что очень удобно.
Всем фана!
Автор поста @litovets
—
Авторские получил
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
polyideic, max-max, singa, sharps, oksana0407, vika-teplo, lokkie, polojayigor, amidabudda, galinakim, makcl
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
dobryj.kit теперь стал Делегатом! Ваш голос важен для всего сообщества!!!
Поддержите нас:
Спасибо за туториалы!
Разрешите позудеть по-старикански...
По гайдам C# публичные свойства должны именоваться в CamelCase. Приватные поля должны именоваться с символом подчеркивания в начале имени и с буквы в нижнем регистре:
private int _hitPoints
Да, я в курсе. Я уже не помню почему, но я решил тут их назвать с маленькой. :)
Возможно для однообразия с JS?
Когда пилишь водиночку, то некритично, а вот ежели планируется приобщить во вспоможение иных коллег, то лучше следовать гайдам данного языка.
Не, точно не поэтому. Возможно просто поленился. :)