Школа программирования для детей “Пиксель” делится бесплатными уроками по освоению Unity и языка C# (Си Шарп). В этом материале мы научимся добавлять зомби в свою игру на Unity. Мы расскажем, как можно добавить модель зомби и разные анимации: спокойного состояния, бега, атаки. С такими элементами можно сделать игру Zombie Mode на Unity или другой интересный проект с тематикой апокалипсиса.
Также мы подготовили подробный видеоурок, где можно посмотреть, что мы добавляем и как настраиваем персонажей и анимации. Найти ролик вы можете в конце этого материала.
Добавление модели и анимации в Unity
Открываем сайт Mixamo. Здесь можно скачать множество моделей и анимаций бесплатно. В разделе “Персонажи” ищем модель нашего зомби, можно выбрать любую понравившуюся. Нажимаем Download. Выбираем формат FBX for Unity, а позу оставляем как есть. Дожидаемся загрузки.
Переходим в анимации.
- Для начала скачаем анимацию спокойного состояния, она называется Idle. Выбираем понравившуюся и нажимаем Download. Настройки загрузки должны быть вот такими: fbx for Unit, 30 кадров в секунду и Skin - Without Skin.
- Далее нам нужна анимация бега. У всех анимаций с перемещением должна обязательно стоять галочка In Place. Нажимаем Download, у нас настройки сохранились, так что просто скачиваем.
- И последнее, что нам нужно, — анимация атаки. Скачиваем ее таким же образом. Теперь все нужное скачано и настало время создавать проект.

Создание проекта
Все скачанные файлы для удобства можно перенести на рабочий стол. Открываем Unity Hub. Создаем новый проект. Создаем папку, где будут храниться анимации и модель зомби. Перемещаем внутрь все файлы. Создаем здесь отдельную папку для анимаций и перемещаем туда fbx-файлы, которые ее содержат. С зажатой клавишей Ctrl выделяем анимацию, содержащуюся внутри, а затем нажимаем Ctrl+D. Теперь fbx-файлы можно удалить. На каждой анимации необходимо поставить галочку Loop Time, чтобы они бесконечно повторялись. Переходим в папку Zombie. И выбираем модель. Здесь во вкладке Materials нажимаем “Распаковать текстуры”. Создадим папку, куда будут извлечены текстуры модели. Выбираем ее и в появившимся окне нажимаем fix now. И таким же образом распакуем материалы. Перемещаем нашего зомби на сцену.

Настройка аниматора
Переходим в папку с анимациями и создаем Animation Controller под названием “Зомби”. Аниматор предназначен для настройки анимации в игре и создания логики перехода между анимациями. Заходим в него и переносим все наши анимации. Переносите анимацию Idle в первую очередь, чтобы она запускалась при старте игры.
Установим связи между анимациями. Последовательно соединяем все анимации, через правую кнопку мыши Make Transition. И так же в обратном порядке.
Теперь создадим переменные, которые будут отвечать за переключение анимаций. Переходим в Parameters. Нажимаем на плюс, выбираем Bool. Даем название Idle, потом Attack, затем Run. Чтобы создать условие перехода, нажимаем на переход. И в Conditions нажимаем на плюс. В данном случае нам нужно из анимации атаки перейти в Idle, поэтому нам нужно задать условием перехода “Idle равно true”. Если же мы выберем переход от Idle к Attack, то условием будет “Attack равно true”. То есть чтобы перейти в какую-либо анимацию, нам нужно будет переключить соответствующую переменную в состояние True, а все остальные — в False.
Также у всех переходов необходимо убрать галочку Has Exit Time, чтобы анимации смогли прерывать друг друга в любое время.

Создание скрипта для зомби в Unity
Перейдем к созданию скрипта для зомби. Создаем новый скрипт и называем его Zombie. Сделаем отдельную папку со скриптами и переместим его туда.
Так как мы хотим, чтобы зомби нас преследовал, подключим UnityEngine.AI. Объект, который будет перемещаться по уровню под управлением искусственного интеллекта, должен иметь компонент NavMeshAgent, поэтому напишем следующую строчку, чтобы при подключении скрипта, данный компонент автоматически добавлялся.
Объявляем трансформ цели, до которой зомби будет бежать, сюда мы подключим игрока. Далее объявляем дробную переменную расстояния между зомби и целью, а также NavMeshAgent самого зомби и его аниматор.
В методе старт записываем в переменные соответствующие компоненты. Далее в Update в переменную distance с помощью функции вычислим расстояние между зомби и целью. Создадим условие: если расстояние больше десяти, то зомби не будет перемещаться и искать путь до цели, а также анимация будет переключена в Idle, то есть в анимацию спокойствия. С помощью setBool происходит переключение переменных из аниматора. Idle в данном случае будет true, то есть включена, а остальные — false, то есть выключены.
Если же расстояние будет меньше или равно 10 и больше 1.5, то NavMeshAgent активируем, что заставит зомби перемещаться к игроку. Укажем, к чему именно необходимо переместиться с помощью метода, передав в качестве параметра координаты цели. А анимацию переключаем на бег.
Если же цель ближе чем 1.5, то выключаем NavMeshAgent, то есть останавливаем зомби и включаем анимацию атаки.
Перед переходом в Unity не забудьте сохранить скрипт с помощью комбинации клавиш Ctrl+S.

Настройка игровых объектов
Переносим скрипт на зомби и, как мы видим, компонент NavMeshAgent добавился автоматически. Также не забудем подключить аниматор. Добавим игрока на сцену с помощью бесплатного ассета Mini First Person Controller, который можно найти по ссылке: Mini First Person Controller | Input Management | Unity Asset Store. После импорта в проект заходим в папку и перетаскиваем объект игрока на сцену. Мы выберем минимальную версию, так как дополнительные функции сейчас не понадобятся. Переместим в удобное место и добавим тег Player. Укажем объект игрока в качестве цели в скрипте зомби. Создадим Plane, по которому игровые персонажи будут перемещаться. Удалим камеру со сцены, так как мы будем использовать ту, которая уже есть в объекте игрока. В окне Project создадим папку с материалами и в ней добавим материал для plane. Подключим материал, а затем укажем поверхность статической, так как она не должна будет реагировать на физику.

Настройка поверхности для перемещения
Откроем окно навигации. Нажимаем window, AI, Navigation. Выбираем Plane и переходим на вкладку Bake. Перемещаемся так, чтобы было хорошо видно место соприкосновения ног зомби и Plane. Немного опускаем Plane и нажимаем Bake. Нужно, чтобы голубая поверхность, которая появляется над Plane, соприкасалась с ногами зомби. Именно по этой поверхности зомби будет перемещаться. Немного опускаем Plane и нажимаем Bake. Проверяем. После настройки поверхности нужно поднять Plane обратно. Запускаем игру и проверяем.

На этом урок по созданию зомби в Unity окончен. Если вы хотите глубже разобраться в Юнити, записывайтесь к нам на онлайн-курс по разработке игр. Мы обучаем детей и подростков программированию на языке C# и созданию 2D- и 3D-игр с нуля.
Заглядывайте также на наш YouTube-канал, чтобы посмотреть новые видеоуроки по Unity. В роликах мы показываем, как создать простой хоррор, разработать кликер, настроить важные компоненты игры: добавить таймер, сделать полосу жизни, разместить спавн, настроить движение персонажа и т. д.
Скрипт для зомби:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
[RequireComponent (typeof(NavMeshAgent))]
public class Zombie : MonoBehaviour
{
[SerializeField] Transform target;
float distance;
NavMeshAgent myAgent;
Animator myAnim;
private void Start()
{
myAnim = GetComponent<Animator>();
myAgent = GetComponent<NavMeshAgent>();
}
private void Update()
{
distance = Vector3.Distance(transform.position, target.transform.position);
if (distance > 10)
{
myAgent.enabled = false;
myAnim.SetBool("Idle", true);
myAnim.SetBool("Run", false);
myAnim.SetBool("Attack", false);
}
if (distance <= 10 & distance > 1.5f)
{
myAgent.enabled = true;
myAgent.SetDestination(target.transform.position);
myAnim.SetBool("Idle", false);
myAnim.SetBool("Run", true);
myAnim.SetBool("Attack", false);
}
if (distance <= 1.5f)
{
myAgent.enabled = false;
myAnim.SetBool("Idle", false);
myAnim.SetBool("Run", false);
myAnim.SetBool("Attack", true);
}
}
}