Итог: пул пуль
Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 40 из 50.
Задание
СреднеПрактика стрельбы. Стрелки перемещают Tank влево и вправо (готово), а у двух красных мишеней есть скрипт Target с методом Hit() (готово). Сделай так, чтобы танк стрелял пулями из пула:
- В
Tank.csсоздайObjectPool<Bullet>, который создаёт пули изbulletPrefab, включает их при получении из пула и выключает при возврате, уничтожает пули, которые пул больше не хранит, и оставляет не более 4 запасных пуль. - Пробел извлекает пулю из пула и запускает её на расстоянии 1 единицы перед танком.
- В
Bullet.csпуля летит вперёд (+z) со скоростьюspeed(15). При столкновении с объектом со скриптом Target (коллайдер пули настроен как триггер) она вызывает у целиHit()и сразу возвращается в пул. Если пуля ни во что не попала, она возвращается в пул черезlife(1) секунду. - При каждом выстреле пуля получает полный срок жизни, в том числе при повторном использовании, и возвращается в пул один раз за выстрел.
Нажми Play, выстрели в обе мишени, затем нажми Check.
Попробуйте сами
using UnityEngine;
using UnityEngine.Pool;
public class Bullet : MonoBehaviour
{
public float speed = 15f;
public float life = 1f;
// Лети вперёд; возвращайся в пул при попадании в Target или по истечении life секунд
}
Все уроки раздела Архитектура игр в Unity
1Компоненты, а не иерархии
Небольшие компонентыБазовый скрипт врагаАбстрактные компонентыСовместная работа компонентовПовторение: модульная турель4Сериализованные данные
Сериализуемые классыСписки в InspectorПеречисления в InspectorПовторение: таблица лута2Интерфейсы в Unity
IDamageableИнтерфейсы и TryGetComponentGetComponentsПовторение: клавиша взаимодействия5ScriptableObjects
Ресурсы данныхХарактеристики оружияОбщие настройкиВолны как данныеПовторение: база предметов