Перейти к содержимому

Unity как сделать анимацию персонажа

  • автор:

Unity. Управление персонажем и анимации

Может есть какой-то более простой способ управления? Я хотел сделать шутер с элементами РПГ и выживалки с видом как в Кримсонлэнд или алиен шутер, но для второй игры (уровень у меня полного нуба), видимо — тяжеловато.

Так же я в нижнем апдейте из аниматора беру анимации в зависимости от скорости движения персонажа. Там всё просто было бы, если бы игрок всегда смотрел бы только на север. Типа Если V больше нуля, тогда strafelеft, а если H больше нуля — тогда анимация runningforward и т.д.. А так у меня я хз как делать.

Один из вариантов такой, что можно сделать вид от третьего лица, тогда перед персонажа всегда будет туда, куда смотрит камера. Но это тогда хрень получится, если делать с «высоким» видом — голова у игрока закружится. При этом я бы хотел оставить свободный курсор.

using UnityEngine; using System.Collections; [RequireComponent(typeof(Rigidbody))] public class PlayerControl : MonoBehaviour < [Header("Скорость:")] public float speed = 1.5f; public float acceleration = 100f; [Header("Поворот:")] public Transform bodyTransform; public float smooth = 3; public bool useSmooth; [Header("Скрипт контроля камеры")] public Transform cameraParent; private Vector3 direction; private Rigidbody body; public Animator _anim; void Awake() < body = GetComponent(); body.freezeRotation = true; > void FixedUpdate() < body.AddForce(direction.normalized * acceleration * body.mass * speed); if(Mathf.Abs(body.velocity.x) >speed) < body.velocity = new Vector3(Mathf.Sign(body.velocity.x) * speed, body.velocity.y, body.velocity.z); >if(Mathf.Abs(body.velocity.z) > speed) < body.velocity = new Vector3(body.velocity.x, body.velocity.y, Mathf.Sign(body.velocity.z) * speed); >Rotation(); > void Rotation() < Vector3 lookPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.y)) - body.position; lookPos.y = 0; if(useSmooth) < Quaternion playerRotation = Quaternion.LookRotation(lookPos); bodyTransform.rotation = Quaternion.Lerp(bodyTransform.rotation, playerRotation, smooth * Time.fixedDeltaTime); >else < bodyTransform.rotation = Quaternion.LookRotation(lookPos); >> void Update() < float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); direction = new Vector3(h, 0, v); direction = cameraParent.TransformDirection(direction); direction = new Vector3(direction.x, 0, direction.z); >> 

Разработка игр (Урок 6 — Анимация в Unity3D)

Чек-лист успешной адаптации или как пройти испытательный срок в компании?

10 ключевых ошибок во время собеседования

Подготовка к собеседованию в IT

Активный поиск первой работы в IT – советы и частые ошибки

IТ в период войны: как найти первую работу

Использование и оптимизация UI системы при создании игр в Unity.

Объяснение деталей, функций записей анимации, курируя движком Unity3D, в редакторе непосредственно. Демонстрация различных примеров анимации простых объектов. Разъяснение построения и создания на примерах детального и функционального скелета рук для игр, руководясь принципом от первого лица.

Покупай подписку с доступом ко всем курсам и сервисам

Библиотека современных IT знаний в удобном формате

Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

  • Все видеокурсы на 3 месяца
  • Тестирование по 10 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин
  • Все видеокурсы на 6 месяцев
  • Тестирование по 16 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин
  • Все видеокурсы на 1 год
  • Тестирование по 24 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин

Как сделать 2D-анимацию в Unity с минимумом кода: кадры и скрипты

Инди-играм может не хватать визуальной привлекательности. Разбираемся, как оживить персонажей и фоны с помощью самой простой анимации.

Евгений Кучерявый

Евгений Кучерявый

Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.

Что можно анимировать в Unity

Анимация позволяет оживить игру даже с самой примитивной графикой. Например, персонаж для игры из этой статьи выглядит вот так:

В нём нет ничего привлекательного, это набор простых фигур. Посмотрите, как он изменится, если добавить анимацию:

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

С помощью анимации можно оживить и фоны. Например, сделать:

  • качающиеся волны;
  • блики небоскрёбов;
  • загорающиеся и гаснущие окна домов;
  • мерцающие звёзды и так далее.

Анимацию добавляют и в интерфейсы: переливающиеся шкалы здоровья, поблёскивающие кнопки. Даже вращающаяся шестерёнка вместо простой надписи «Загрузка…» украсит проект.

Мини-игра к этой статье и все ассеты выложены в репозитории на GitHub. Если хотите научиться делать игры с нуля, рекомендуем записаться на курс «Профессия разработчик игр на Unity».

Анимация «из коробки» в Unity

В Unity создают анимацию с помощью:

Скрипт изменяет параметры объекта при определённых условиях: обновлении масштабов, добавлении цвета и так далее.

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

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

Мы рассмотрим только скриптовую и покадровую анимацию в Unity, потому что для скелетной требуются специальные ассеты, и она куда сложнее.

Анимация вращения с помощью скрипта в Unity

Когда вы создаёте персонажа и добавляете ему спрайт, а потом управляете им, герой всегда смотрит в одну и ту же сторону, даже если движется в другую.

Исправить, создав отзеркаленную версию спрайтов, — не лучший вариант, потому что придётся делать лишнюю работу. Правильнее написать скрипт, который вращает объект.

Сначала в Character.cs добавим поле:

Подготовка спрайтов для анимации в Unity

Чтобы работать с покадровой анимацией, создаём по набору спрайтов для каждого состояния игрока:

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

Например, для состояния Idle:

Подвигайте персонажа в Photoshop и сохраните каждый кадр как отдельный файл. Старайтесь давать имена, по которым поймёте шаг анимации: Robot_Idle1.png, Robot_Attack2.png и так далее.

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

Добавление анимации

Готовые спрайты добавьте в папку с ассетами. Затем выберите в списке с объектами персонажа и зайдите в меню Window — Animation.

Дальше нажмите Create и выберите путь сохранения анимации. Желательно сохранять все анимации в отдельную папку. Сам файл можно назвать Character_Idle.anim или Character_Jump.anim. Первая часть соответствует названию объекта, а вторая — состоянию.

Перетащите необходимые спрайты на временную шкалу.

Теперь запускаем анимацию кнопкой Play. Так как кадров мало, они меняются слишком быстро. Чтобы это исправить, измените значение Samples. По умолчанию установлено 60, но попробуйте поставить 12, 6, 3 или любое другое значение.

Вот как выглядит такая анимация в игре:

Таким же способом создайте анимацию и для других состояний: Run, Jump, Attack.

Управление переходами

Теперь сделаем так, чтобы анимация менялась вместе с состоянием объекта.

Например, если игрок нажмёт на кнопку атаки, персонаж должен не только выпустить снаряд, но и изменить свою анимацию. Чтобы управлять сменой состояний, используются переходы из Animator или Animation Controller. Он автоматически появился в той же папке, в которую сохранена анимация.

Чтобы запустить его, зайдите в меню Window — Animator. Вот как выглядит этот файл:

Изначально в нём уже собраны все созданные анимации, но не установлены связи. Чтобы добавить их, используйте переходы.

Первый переход находится между состояниями Entry и Character_Idle — это анимация, воспроизводимая по умолчанию.

Exit задает анимацию, которая появится перед смертью героя. А Any State — переход из любого состояния, он значительно сократит количество компонентов Transition.

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

Теперь добавим сами переходы. Нажмите на любое состояние правой кнопкой мыши и выберите Make Transition. Затем проведите стрелку на любую другую анимацию.

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

Тут указано, что переход будет совершён, если персонаж на земле и если его скорость больше 0,1. Такое маленькое значение установлено, чтобы анимация реагировала даже при незначительных изменениях.

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

По умолчанию параметры никак не меняются — их обновление прописывают с помощью скриптов. Для этого зайдите в Character.cs и добавьте поле animator:

Быстрая и эффективная 2D-анимация

Создавайте плавную скелетную анимацию напрямую в Sprite Editor с помощью риггинга, тесселяции и создания костей. Воспользуйтесь PSD Importer, чтобы импортировать части персонажей напрямую из многослойной графики, и анимируйте их с помощью опорных кадров или кривых во временной шкале воспроизведения анимации. 2D Inverse Kinematics (IK) упрощает процесс анимации, автоматически рассчитывая положение костей и вращение, необходимое для достижения целевого положения.

Зачем использовать 2D-анимацию

Экономить время

С помощью основанной на использовании костей системы 2D-анимации вы сможете повторно использовать спрайты, чтобы оживлять персонажей, изменять частоту обновления кадров или мгновенно изменять анимацию. Экономьте время, импортируя многоуровневые изображения с помощью PSD Importer, ведь так вам не придется экспортировать спрайты по одному и пересобирать детали.

Плавная и адаптируемая анимация

Иногда анимацию необходимо изменить прямо во время выполнения программы, например, чтобы создать плавный переход, подстроить скорость анимации к скорости персонажа или чтобы отобразить реакцию ног персонажа на контакт с поверхностью. Узнайте, как Inverse Kinematics может помочь воплотить ваших персонажей в вашем мире.

Большее анимаций при меньшем количестве ассетов

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

Основные характеристики

Создание мешей и костей

Sprite Editor позволяет автоматически или вручную создавать меши для ваших спрайтов, устанавливать иерархию костей и задавать их вес в вершинах мешей.

Нативные решения для всех платформ

2D-анимация совместима с новыми версиями редактора и экосистемой инструментария. Разработка для нескольких платформ одновременно и бесшовная интеграция помогают сократить количество проблем с зависимостью и объем работы по импорту и экспорту.

Инструменты анимации

Создавайте анимацию прямо в окне Scene с помощью окна Dopesheet или кривых анимации и запускайте события. Используйте Animator для управления переходами анимации или Timeline для создания кат-сцен из нескольких анимационных клипов. Система частиц добавляет эффекты или 2D-физику, что делает поведение персонажей более реалистичным.

Атлас спрайтов

Объединяет несколько текстур в одну, что сокращает количество вызовов отрисовки и оптимизирует производительность. Добавьте своих анимированных в 2D персонажей и прочие элементы в один атлас. Вы сами можете определять, как упаковывать текстуры, задавая конфигурации для каждой платформы. API дает вам полный контроль над этим инструментом.

Продвинутые функции и API

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

Новые возможности графики

Улучшите своих 2D-персонажей с помощью новой системы 2D-освещения для объемных эффектов с картами нормалей, инструмента Shader Graph, позволяющего создавать шейдеры в графическом интерфейсе, или Burst, значительно повышающего производительность.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *