Как сделать мяч в юнити

Добавил пользователь Cypher
Обновлено: 05.10.2024

Этапы разработки игры

Есть много способов разработки проектов, много вариантов этапов, на которые можно разделять этот процесс. Например, вот этот:
Этапы разработки игры

Альфа — команда разрабатывает концепцию (т. е. начальное описание) нового проекта.

Пре-продакшн — разрабатывается прототип проекта.

Софт-ланч — прототип проекта расширяется командой разработки до полноценной версии игры в соответствии с составленным планом и проектной документацией. Этап заканчивается выпуском ранней версии игры. Обычно такая версия содержит 30–50% от полного количества игрового контента и отличается от предыдущих технических версий большой стабильностью работы и малым количеством ошибок.

Хард-ланч — собирается статистика по ранней версии игры, с учетом этой статистики игра приводится к поздней версии. Выбирается маркетинговая стратегия, формируется план дальнейшего улучшения игры.

Поддержка — формируется команда поддержки (как правило, это часть команды разработки) для выпуска последовательных обновлений с учётом статистики. Продюсер продолжает работу на проекте в качестве консультанта, перекладывая основные задачи на гейм-дизайнеров команды поддержки.

В этой статье мы разберем этап пре-продакшна или создания прототипа.

Примитивные объекты

Unity может работать с 3D моделями любой формы, создаваемыми в приложениях для моделирования. Однако, существует ряд примитивных моделей, которые можно создать прямо в Unity: Куб (англ. — Cube), Сфера (англ. — Sphere), Капсула (англ. — Capsule), Цилиндр (англ. — Cylinder), Плоскость (англ. — Plane) и Квад (англ. — Quad). Эти объекты часто применяются как есть (плоскость обычно используется в качестве поверхности земли, например), но также они позволяют быстро создать прототипы сложных объектов в целях тестирования. Любой из примитивов может быть добавлен в сцену с помощью соответствующего пункта в меню GameObject → Create 3D Object. Для прототипирования очень удобно использовать кубы и цилиндры 👐

Куб

Это простой куб. Сам по себе куб не так часто встречается в играх, но если изменить его размеры, то его можно использовать в качество стен, столбов, коробок, ступенек и других аналогичных предметов. Для разработчиков, куб — удобная замена итоговой модели, если она ещё не готова. Например, кузов автомобиля может быть грубо представлен в виде вытянутого до нужных габаритов куба. Вполне подходит в качестве заготовки для тестирования кода управления автомобилем 🚘

Куб

Куб

Сфера

Сферы полезны для создания ⚽ мячей, 🌏 планет или 💣снарядов.

Сфера

Сфера

Капсула

Капсула — это цилиндр с полусферическими колпаками на концах. Хоть в реальном мире и не так много объектов с такой формой, капсулу тоже удобно использовать для прототипирования. Например, в некоторых задачах физика закруглённого объекта предпочтительнее, чем физика прямоугольного.

Капсула

Капсула

Цилиндр

Цилиндры удобно применять для создания столбов, труб или колёс.

Цилиндр

Цилиндр

Плоскость

Плоскость удобна для отображения картинок и видео в GUI, и для различных спецэффектов. Хоть плоскость и может использоваться для описанных выше вещей, более простой примитив квад чаще подходит для таких задач.

Плоскость

Плоскость

Квад

Примитив квад аналогичен плоскости, но он состоит только из двух треугольников, в то время как плоскость — из двухсот. Квад будет полезен, если в сцене требуется создать экран для вывода изображений или видео. С помощью квадов можно создать простые информационные и GUI экраны, а также частицы, спрайты и “обманные” изображения для имитации удалённых больших объектов.

Квад

Квад

Прототипирование

Прототип

Прототип

Когда ты и твоя команда решите, что идея игры (концепция) готова и уже не терпится в нее поиграть, следующим шагом для вас будет — создание прототипа.

Прототип — это упрощенная модель игры (чего угодно), с помощью которой можно проверить: интересно ли в нее играть и стоит ли продолжать разработку.

Чтобы не тратить много времени на подготовку прототипа, его обычно собирают из примитивных объектов, используя готовые компоненты игрового движка: кубы, цилиндры, физику движка, готовые контроллеры для управления игроком и подобные полезные вещи. Уровень собирается буквально из серых кубиков.

На этапе прототипирования в здоровой команде или компании важно придерживаться правила “Failure is an Option”. Вы делаете прототип, оцениваете результат и, если он вас не устраивает, выбрасываете. Быстрые итерации позволяют эмоционально не привязываться к проделанной работы, поэтому процесс получается простым и приятным. Чаще всего в самом начале даже вообще не используют игровой движок:

Достань себе блокнот либо альбом для рисования. Нет никакой необходимости думать о качестве зарисовок — любой может рисовать при помощи простых линий и форм достаточно хорошо, чтобы это помогло в планировании. Если зарисовка готова, то можно приступать к работе с игровым движком.

Создание и редактирование примитивного объекта

Как ты уже знаешь, чтобы создать объект, в меню нужно выбрать GameObject → Create 3D Object. Для того, чтобы перемещать игровой объект, тебе понадобится Панель инструментов.

Панель инструментов

Панель инструментов

Часто требуется переключаться между инструментами, поэтому запомни горячие клавиши, которые чаще всего используются:

  1. W — кнопка перемещения объекта. Если во время перемещения удерживать кнопку V, то один объект можно примагнитить к другому объекту.
  2. E — кнопка вращения объекта.
  3. R — кнопка изменения размера объекта.

С помощью линий, которые появляются, когда ты выбираешь объект, ты можешь изменять свойства его компонента Transform. Transform отвечает за позицию, разворот и размер. Используя разные примитивные объекты, изменяя их размеры, перемещая и разворачивая, можно сделать прототип практически любого объекта. Например, моста:

Prefabs

Если ты посмотришь в Иерархию, после того как сделаешь мост, то увидишь, что в ней отображается уже 11 объектов! И это только мост, камера и освещение. Представь, что будет, если ты запрототипируешь целый уровень… Ориентироваться в сцене будет очень тяжело. Поэтому для упрощения принято объединять несколько объектов и сохранять их, как prefab’ы.

Prefab — это игровой объект, который может состоять из нескольких игровых объектов. Все копии prefab’а на сцене можно легко и быстро редактировать, что очень сильно упрощает работу дизайнера уровней.

Первое, что нужно сделать объединить объекты в один. Очень удобно для этого использовать Пустой объект (англ. — Empty). Размести его в центре будущего prefab’а:

Пустой объект в центре моста

Пустой объект в центре моста

Теперь выбери все нужные объекты для объединения, кроме Empty(!), в Иерархии и перетащи их в Empty:

Теперь Empty принято называть родительским объектом по отношению к объектам, из которых состоит мост, а сами эти объекты называют дочерними.

Но прежде, чем ты начнешь копировать свой объект, его стоит сохранить в окне Проект. Для этого выбери, только что переименованный, Bridge левой кнопкой мыши и, не отпуская, перетащи его в окно Проект. Вот теперь можно сказать, что ты создал свой первый prefab. Поздравляем🎉

Prefab Bridge

Prefab Bridge

Чтобы в твой прототип можно было поиграть, тебе нужно добавить в него Игрока. Посмотри 📖инструкцию, чтобы узнать как это сделать.

Осталось только научиться сохранять свой проект, чтобы не начинать каждый раз сначала.


Посмотри это замечательное видео, оно поможет делать твои уровни лучше.

Библиотека программиста

Библиотека программиста

Библиотека программиста запись закреплена

Пишем арканоид на Unity. Механика мяча и платформы

Статья из цикла о написании простой игры на Unity — классического арканоида. Эффективное использование 2D инструментов, представляемые движком.

Можно было бы много рассказывать в вводной части статьи о том как Unity3D хорош )), но я это го делать не буду, потому что знаю, что многим это не нравится. Мое повествование относительно данного инструмента будет по существу с комментариями, которые должны помочь Вам начать работать в нем.

2. Создаем свой первый проект.





3. Знакомимся со средой.
По умолчанию Вы внешний вид (на сколько мне не изменяет память) выглядит как на следующем скриншоте (у меня все настроено под себя, сейчас выбран Layout типа Tall, если вам захочется посмотреть другие типа расположения основных окон, либо открыть те, которые не отображены по умолчанию, то вы сможете найти их в меню Window).


Так же главное окно содержит несколько полезных кнопок: слева вверху – кнопки управления видом окна Scene и манипуляций с объектами, вверху посередине – кнопки запуска отладки проекта и ее остановки (при запуске становится активным окно Game которое отображает все, что происходит в проекте с видом из главной камеры).


4. Начинаем осваиваться.


Выбрав одну из текстур, Вы увидите ее параметры импорта в окне Inspector.



По умолчанию создается материал Diffuse, которому можно назначить цвет и одну текстуру. Назначить текстуру можно перетащив ее из окна Project на специальную область либо щелкнуть в данной области на маленькую кнопочку Select и выбрать текстуру из списка. Я предпочитаю первый вариант, так же как и с импортом ресурсов.


Но данный материал меня не устраивает, т.к. он не содержит поде для карты нормалей, с помощью которой я могу придать материалу более реалистичный вид. К счастью Unity3d имеет порядка сорока готовых материалов, которыми можно пользоваться. Выбрать тип материала можно из выпадающего списка, в котором сейчас выбран материал Diffuse. Для примера я выберу материал Paralax Specular для придания большей реалистичности нашему материалу.


Ну вот, наш первый материал готов.

Теперь давайте добавим в сцену первые объекты.
Создаются стандартные объекты с помощью меню GameObject.


Давайте добавим в сцену плоскость, куб и источник света. Разместим их примерно как показано на следующем скриншоте.



В этом меню так же будут появляться пользовательские компоненты, когда они будут разработаны.
2) Второй способ - назначение пользовательских компонентов, путем перетаскивания скриптов из окна Project на окно Inspector активному объекту. Этот способ демонстрирует возможность назначения поведения объектам простым перетаскиванием, что является достаточно высокоуровневой задачей. Как это происходит, будет описано чуть ниже.

Выбрав в инспекторе куб можно увидеть сразу три назначенных компонента: Mesh Filter – компонент, позволяющий назначить объекту геометрическую сетку любой из импортированных моделей; Box Collider – физический коллайдер-примитив в виде бокса, говорящий другим физическим объектам сцены, что с этим объектом можно столкнуться; Mesh Renderer – компонент, вызывающий визуализацию назначенной данному объекту геометрической сетки в компоненте Mesh Filter с использованием назначенных материалов.

Итак, наша задача минимум – назначить нашему кубику созданный нами материал и заставить кубик упасть на плоскость, т.е. сделать куб динамическим твердым телом.
Чтобы назначить материал кубу – достаточно просто перетащить его на куб, либо открыть список материалов компонента Mesh Renderer нашего куба и перетащить материал на первый слот в массиве, либо (уже третье либо, о блин ну вот четвертое) щелкнув по слоту выбрать материал из выпадающего списка, заменив тем самым материал по умолчанию.
В инспекторе, после этой операции под компонентом Mesh Renderer появятся настройки присвоенного материала кубу.


Теперь, чтобы сделать куб динамическим, необходимо добавить ему компонент Rigid Body. Найти его можно в меню Component->Physics. Данный компонент так же появится в инспекторе выделенного куба.



5. Начинаем создавать мозги!

Теперь можно посмотреть на внутренности наших мозгов, т.е. на содержимое созданного скрипта NewBehaviourScript.cs. Сделать этом можно дважды щелкнув по нему в окне Project (если вы выбрали в настройках Visual Studio, то Unity3d сгенерирует и откроет новое решение с данным скриптом, а так же откроет в браузере Visual Studio локальную справку по API функциям движка).
using UnityEngine;
using System.Collections;

Как видим все ясно и просто. Сохраняем и возвращаемся в Unity3d. Unity3d по умолчанию переимпортирует все измененные ресурсы при получении фокуса, а следовательно, и скомпилирует наш компонент. Нам остается только назначить компонент кубу и задать его параметры, как показано на следующем скриншоте. Инспектор преобразовал для нас публичные поля класса в редактируемые, так что работать с параметрами для каждого объекта становиться очень просто.



Запускаем сцену и наслаждаемся полученным результатом. А данная статья на этом закончена. Всем удачи в освноении Unity3d!

Спрайт выстрела

Снаряд – объект, которым мы будем пользоваться очень часто. В игре будет несколько сцен, в которых игрок будет стрелять. Что мы должны использовать в этом случае? Префаб (Prefab), конечно же! Для этого проделайте следующие действия:

  1. Импортируйте текстуру
  2. Создайте новый спрайт в сцене
  3. Установите изображение на спрайт.
  4. Добавьте "Rigidbody 2D" с равныим нулю значениями "Gravity Scale" и "Fixed Angles".
  5. Добавьте "Box Collider 2D" размером (1, 1) .

Та-дам! У нас появился выстрел. Теперь настало время немного поскриптить. Создайте скрипт, назвав его "ShotScript":

Прикрепите "ShotScript" к спрайту. Также добавьте "MoveScript", т.к. ваши снимки будут двигаться. Теперь перетащите объект выстрел в панель "Проект" для создания Префаба. Он нам совсем скоро понадобится. Вы должны иметь следующую конфигурацию:

Конфигурация Выстрел 1

Если вы запустите игру с помощью кнопки "Play", вы увидите, что выстрел движется.

Столкновения и повреждения

Тем не менее, выстрел (пока) не наносит повреждений. Ничего удивительного, ведь мы не сделали скрипт обработки повреждений. Создадим его, назвав "HealthScript":

Добавьте "HealthScript" на префаб спрута.

Внимание: Лучше всего поработать непосредственно с префабом. При этом каждый экземпляр врага, участвующий в сцене, будет модифицирован так, чтобы отражать префаб. В данном случае это особенно важно, потому что в нашей сцене будет много врагов. Если вы сосредоточили усилия на экземпляр игрового объекта вместо префаба, не волнуйтесь: нажав на кнопку "Применить" сверху вкладки "Инспектор", вы добавите эти изменения и в префаб.

Убедитесь, что выстрел и спрут находятся на одной линии, чтобы проверить столкновение. Напоминаю, что 2D движок ничего не знает про ось Z, поэтому ваши 2D коллайдеры всегда будут в той же плоскости. А теперь, запустите нашу сцену. Вы должны увидеть следующее:

Здоровье врага превосходит урон от выстрела, поэтому он выживет. Попробуйте изменить значение hp в "HealthScript" врага:

Стрельба

Удалите выстрел из сцены. Теперь, когда мы с ним закончили, ему нечего там делать. Нам нужен новый скрипт для стрельбы. Создайте его под именем "WeaponScript". Этот скрипт мы будем использовать везде (игроки, враги и т.д.) Его цель заключается в to instantiate снаряда перед игровым объектом, к которому он привязан. Вот полный код, больше, чем обычно. Объяснения ниже:

Прикрепите этот скрипт к игроку. Скрипт делится на три части:

Переменные во вкладке "Inspector"

Здесь у нас есть два члена: shotPrefab и shootingRate .

Первый необходим для установки выстрела, который будет использоваться с этим оружием.

Выберите игрока в сцене "Hierarchy". В компоненте "WeaponScript", вы можете увидеть свойство "Shot Prefab" со значением "None". Перетащите префаб "Shot" на это место:

Использование префаба

Unity автоматически дополнит скрипт это информацией. Удобно, не так ли?

Переменная shootingRate имеет значение по умолчанию, установленное в коде. Мы не будем менять его на данный момент. Но вы можете начать игру и экспериментировать с ним, чтобы узнать на что она влияет.

Будьте осторожны: изменение значения переменной во вкладке "Инспектор" в Unity не приводит к сохранению этих значений в скрипте. Если добавите этот скрипт в другой объект, значение по умолчанию будет таким, которое написано в скрипте. Если же вы хотите сохранить отредактированные параметры, вы должны открыть свой редактор кода и записать эти значения там.

Оружие обладает определенной частотой выстрелов. Без этого параметра можно было бы выпускать неограниченное количество патронов в каждом кадре.

Поэтому нам нужен простой механизм охлаждения. Если его значение превышает 0 , мы просто не можем стрелять. Мы вычитаем прошедшее время из каждого кадра.

3. Публичный метод создания атаки

Главная цель этого скрипта – активироваться через другой скрипт. Поэтому для создания снаряда мы используем публичный метод.

Создав екземпляр снаряда, мы извлекаем скрипты объекта выстрела и оверрайдим некоторые переменные.

Внимание: С помощью метода GetComponent () можно создать точный компонент (а значит, и скрипт, потому что скрипт – тоже компонент) объекта. Используйте generic ( ) для обозначения конкретного компонента, который вам нужен.
Кроме того, у нас есть GetComponents () , вызывающий список вместо первого и т.д.

Использование оружия с классом игрока

Если вы запустите сейчас игру, то увидите, что ничего не изменилось. Мы создали оружие, но оно совершенно бесполезно.

В самом деле, если "WeaponScript" был бы привязан к классу, мы никогда не смогли бы использовать метод Attack(bool) .

Давайте вернемся к нашему "PlayerScript".

В функции Update() добавьте этот кусочек кода:

На данном этапе неважно, поставите вы его перед или после движения.

  1. Мы определяем нажатие кнопки стрельбы ( click или ctrl по умолчанию).
  2. Извлекаем скрипт объекта.
  3. Мы запускаем Attack(false) .

Button down: Вы уже наверняка заметили, что мы используем метод GetButtonDown() для обеспечения ввода. "Down" в конце позволяет нам ввести данные при нажании кнопки и только один раз. GetButton() будет выводить true в каждом кадре, пока гирок не отпустит кнопку. В нашем случае нам явно необходимо поведение, обеспечиваемое методом GetButtonDown() . Попробуйте использовать GetButton() и почувствуйте разницу.

Запустите игру с помощью кнопки "Play". Вот что вы должны получить:

Пули летят слишком медленно? Поэкспериментируйте с префабом "Shot" чтобы выбрать ортимальное значение. Попробуйте также добавить вращение игроку: (0, 0, 45) . Пули двигаються под углом 45 градусов, даже если вращение спрайта выстрела является некорректным – а ведь мы его не изменили.

Shooting rotation

Итак, у нас уже есть нечто похожее на шутер! Теперь вы умеете создавать оружие, которое может стрелять и уничтожить другие объекты. Давайте двигаться дальше. Мы хотим чтобы враги тоже могли стрелять.

Вражеский снаряд

Мы создадим новый снаряд с помощью этого спрайта:

Вражеский снаряд

Если вы так же ленивы, как я, продублируйте префаб "PlayerShot", переименуйте его в "EnemyShot1" и измените спрайт, как описано выше.

Для дублирования создайте экземпляр, перетащив его на сцену, переименовав созданный игровой объект и, наконец, сохранив его как `Prefab’.

Или можно просто продублировать Prefab напрямую внутри папки с помощью ярлыков cmd+D (OS X) или ctrl+D (для Windows).
Если вы не выбираете легких путей, вы можете создать новый спрайт с параметром rigibody, коллайдером с триггером и т.д.

Правильный масштаб - (0.35, 0.35, 1) .

Вот, что у вас должно получиться.

настойки для вражеского снаряда

При нажатии "Play" произойдет выстрел, который потенциально может уничтожить врага. Это из-за свойств "ShotScript" (которые по умолчанию плохо совместимы с Poulpi).

Не изменяйте ничего. Помните наш "WeaponScript"? Он то и установит правильные значения.

У нас есть префаб "EnemyShot1". Удалите экземпляры со сцены, если они есть.

Также, как мы делали для игрока, также нам нужно добавить оружие и врагу, а потом вызывать Attack() чтобы выстрелить. Вот, что нам надо сделать:

  1. Добавьте "WeaponScript" врагу.
  2. Перетащите префаб "EnemyShot1" в переменную "Shot Prefab" скрипта.
  3. Создайте новый скрипт под названием "EnemyScript". Он просто будет запускать стрельбу в каждом кадре. Что-то вроде автострельбы.

Прикрепите этот скрипт к осьминогу. У вас должно получиться следующее (заметьте, что частота стрельбы немного звеличилась до 0.75 ):

Настойка осьминога с оружием

Замечание: Если вы модифицируете игровой объект в сцене, не забудьте сохранить все изменения в префабе , использовав кнопку "Применить" справа сверху от панели "Инспектор".

Попробуйте сыграть и посмотреть!

Итак, мы сделали то, что хотели и теперь и по нам тоже стреляют.

Если повернуть врага, вы можете сделать его стреляющим в его слева, но, хм. спрайт повернулся вверх ногами, а нам это не нужно.

Перевернутый спрут

Давайте исправим это недоразумение.

Стрельба в любом направлении.

"WeaponScript" был написан особым образом: вы можете выбрать направление стрельбы, просто вращая прикрепленный игровой объект. Мы уже видели это раньше, когда вращали спрайт врага. Суть в том, чтобы создать пустой игровой объект как ребенка префаба врага. Итак, нам нужно:

  1. Создать пустой игровой объект. Назовем его "WeaponObject".
  2. Удалим "WeaponScript", прикрепленный к префабу врага.
  3. Добавим "WeaponScript" к "WeaponObject" и установить свойства префба выстрела как мы это делали раньше.
  4. Повернем "WeaponObject" вот так (0, 0, 180) .

Если вы проделали это все на игровом объекте, а не на префабе, то не забудьте нажать на кнопку "Применить" для сохранения изменений. Вот, что у нас получилось:

Enemy with a new object

However, we have a small change to make on the "EnemyScript" script.

В своем нынешнем состоянии вызов GetComponent () в "EnemyScript" возвращает null. В самом деле, "WeaponScript" больше не привязан к одному объекту игры.

К счастью, в Unity также доступен метод, использующий детскую иерархию игрового объекта, который называется GetComponentInChildren () .

Для GetComponent<>() , GetComponentInChildren<>() также существует в форме множественного числа: GetComponentsInChildren () . Обратите внимание на s после "Component". Этот метод возвращает список вместо первого соответствующего компонента.

На самом деле, просто для удовольствия, мы также добавили возможность управления несколькими видами оружия. Мы просто манипулируем списком вместо одного экземпляра компонента. Взгляните на весь "EnemyScript":

Наконец, нужно обновить скорость выстрела путем настройки публичной пременной "MoveScript" из префаба "EnemyShot1". Скорость выстрела должна быть больше скорости движения спрута:

Мы сделали великого и ужасного осьминога. А давайте еще реализуем стрельбу в двух направлениях?

Стрельба а двух направлениях

Эта задача реализуеся всего в пару кликов. Для этого не нужны никакие скрипты:

  1. Добавьте другое оружие врагу (дублируя первый "WeaponObject").
  2. Измените угол поворота второго "WeaponObject".

Враг должен сейчас стрелять в двух направлениях. Возможный результат:

Это хороший пример правильной работы в Unity: создавая независимые скрипты вроде этого и делая публичными некоторые полезные переменные, можно значительно уменшить количество кода. Меньше кода - меньше ошибок.

Нанесение урона игроку

Наши осьминоги внушают ужас? Как бы не так! Да, они могут стрелять, но это не наносит повреждения игроку. Может, у них холостые патроны? Давайте разбираться.

Просто добавьте "HealthScript" на игрока. Убедитесь, что сняли галку с поля "IsEnemy".

Конфигурация скрипта, отвечающего за здоровье игрока

Запустите игру и почувствуйте разницу:

Бонус

Вот вам некоторые советы для улучшения аспекта стрельбы в вашей будущей игре. Вы можете пропустить эту часть, если вас не интересуют подробности, относящиеся к жанру шмапа.

Солкновения игрока с врагом

Давайте посмотрим, как мы можем обработать столкновения между игроком и врагом, поскольку сейчас они сталкиваются друг с другом без последствий. Столкновение - это результат пересечения двух не-триггерных 2D коллайдеров. Нам просто нужно обрабатывать событие OnCollisionEnter2D в PlayerScript :

При столкновении мы наносим урон как врагу, так и игроку благодаря наличию компонента HealthScript . К нему привязано все, что относится к здоровью/урону.

Массив снарядов

Когда вы играете, вы можете наблюдать ва вкладке "Иерархия" (Hierarchy), что игровые объекты создаются и удаляются только через 20 секунд (если они не сталкиваются с игроком или врагом).

Если ваша цель создание огневой завесы для которой требуется МНОГО пуль, эта техника вряд ли подойдет.

Один из способов увеличить количество пуль – использовать массив. По сути, это набор пуль ограниченного размера. Когда массив заполнен, удалите старый объект и замените его на новый.

Мы не будем использовать его здесь, но в этом нет ничего сложного. Мы использовали ту же технику для скрипта рисования.

Кроме того, можно сократить время жизни пули и тогда она исчезнет быстрее.

Имейте в виду, что использование метода Instantiate довольно затратное удовольствие. Применяйте его осторожно.

Поведение пули

В хорошем шутере должны быть запоминающиеся боевые сцены.

Некоторые библиотеки вроде BulletML значительно упрощают определение сложных и зрелищных bullet patterns.

BulletML для Unity

Если вы хотите сделать полную версию игры в жанре Shoot'Em Up, ознакомьтесь с нашим плагином BulletML for Unity

Задержка выстрела

Добавьте несколько вооруженных противников в сцену и запустите игру. Вы увидете как синхронны все враги.

Можно просто добавить в оружие задержку: поставьте охлаждение на любое значение выше 0. Вы можете использовать алгоритм или просто поставить случайную цифру.

Скорость врагов также может определяться случайной величиной.

Еще раз, это зависит от вас. Все зависит исключительно от того, чего вы хотите достичь с вашим геймплеем.

В следующем уроке

Мы только что узнали, как дать оружие нашим врагам. Мы также увидели как повторно использовать некоторые скрипты для улучшения геймплея.

Результат

Не стесняйтесь добавлять еще больше врагов, оружия и экспериментировать со свойствами. В следующем уроке мы узнаем как изменить фон и сцену, чтобы создать большой по размеру уровень.

Читайте также: