Сегодня Сегодня 0 37

Как сделать процедурную анимацию персонажа в Blender для Unity

+2

Почему процедурная анимация — это круто?

Представьте: ваш игровой персонаж шагает по холмистой местности, его ноги естественно подстраиваются под склон, а руки покачиваются в такт шагам — и всё это без единого ключевого кадра, заданного вручную. Это не магия, а процедурная анимация! В отличие от традиционной анимации, где вы часами выстраиваете каждое движение, процедурная анимация использует алгоритмы, чтобы движения рождались на лету. Это как дать персонажу мозг, который сам решает, как шагать, прыгать или даже танцевать. Для инди-разработчиков это находка: меньше времени на анимацию, больше — на создание крутого геймплея.

В этом гайде мы разберём, как создать процедурную походку для гуманоидного персонажа в Blender и перенести её в Unity. Мы будем использовать Animation Nodes в Blender, чтобы задать динамические движения, а затем настроим всё в Unity, чтобы персонаж ожил в игре. Даже если вы только начинаете, не переживайте — я объясню всё шаг за шагом, с примерами и щепоткой юмора, чтобы не заскучать. К концу вы получите персонажа, который ходит с душой, а не как робот на заводе.

Берите чай (или кофе, я не осуждаю) и погнали!

Что вам понадобится

Перед стартом убедитесь, что у вас всё готово:

  • Blender: Скачайте последнюю версию (4.2 или новее) с blender.org. Это бесплатно и мощно.
  • Unity: Возьмите Unity 2022 LTS или новее с unity.com. Бесплатная версия Personal идеальна для инди.
  • Базовые знания: Если вы знаете, как двигать объекты в Blender или работать с GameObjects в Unity, будет проще. Новичок? Не беда, я всё разжую.
  • Модель персонажа: Нам нужен гуманоид — можно использовать стандартный скелет Blender или скачать готовую модель с Mixamo.
  • Animation Nodes: Бесплатный аддон для Blender, который творит чудеса с процедурной анимацией. Скачайте с GitHub или через Blender Market.

Всё на месте? Тогда вперёд, к созданию живого персонажа!

Шаг 1: Настройка персонажа в Blender

Сначала нам нужен персонаж, которого мы будем анимировать. Если у вас есть своя модель, отлично! Если нет, можно взять готовую или создать простую в Blender. Мы будем работать с гуманоидом — это стандартная модель с руками, ногами и головой.

1.1 Импорт или создание модели

  • Открой Blender и импортируй модель (File > Import > FBX, если берёшь с Mixamo).
  • Хочешь создать с нуля? Добавь Armature (Shift+A > Armature), чтобы сделать скелет. Затем создай простую меш-сетку (например, цилиндр для тела) и привяжи её к скелету (выдели меш, затем скелет, нажми Ctrl+P > With Automatic Weights).
  • Убедись, что скелет имеет гуманоидную структуру: голова, позвоночник, руки, ноги. Это важно для Unity.

Лайфхак: Если ты новичок, возьми модель с Mixamo — там уже есть готовый скелет, и это сэкономит кучу времени.

1.2 Установка Animation Nodes

  • В Blender перейди в Edit > Preferences > Add-ons и найди Animation Nodes. Если его нет, скачай с GitHub и установи через «Install Add-on».
  • Включи аддон и создай новое Node Tree в редакторе Animation Nodes (выбери его из выпадающего меню вверху).

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

Шаг 2: Создаём процедурную походку

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

2.1 Логика походки

  • Перейди в редактор Animation Nodes (выбери его из меню вверху).
  • Создай новое дерево узлов и добавь узел Object Transforms Input, чтобы получить данные о скелете.
  • Добавь узел Sine Wave (Math > Sine) — он создаст плавное движение для ног. Установи амплитуду 0.1 и частоту 2 для мягких шагов.
  • Соедини Sine Wave с Rotation ножных костей через узел Object Transforms Output. Это заставит ноги качаться вперёд-назад, как при ходьбе.

Что мы сделали?: Sine Wave — это как маятник, который создаёт ритм. Применяя его к повороту ног, мы имитируем шаги. Похоже на то, как ты качаешь ногой, сидя на стуле, только круче.

2.2 Движение рук

  • Скопируй настройку Sine Wave для рук, но сдвинь фазу на 0.5 (в настройках узла). Это сделает так, чтобы левая рука двигалась вперёд, когда правая нога шагает.
  • Уменьши амплитуду до 0.05 — руки качаются легче, чем ноги.
  • Соедини с поворотом ручных костей через другой узел Object Transforms Output.

Совет: Поиграй с амплитудой и частотой в реальном времени — это как настройка гитары, где каждый поворот даёт новый звук.

2.3 Вертикальный подъём

Чтобы походка выглядела живой, добавим лёгкий подскок туловища.

  • Создай ещё один узел Sine Wave с частотой 2 и амплитудой 0.02.
  • Соедини его с Location Z базовой кости (таз или основание позвоночника).

Этот подскок имитирует естественное движение тела при ходьбе — как будто ты слегка подпрыгиваешь с каждым шагом.

2.4 Делаем анимацию процедурной

Чтобы походка реагировала на скорость, добавим управление.

  • Добавь узел Float Input для контроля скорости.
  • Умножь частоту Sine Wave на Float Input через узел Math > Multiply.
  • Протестируй, изменяя Float Input от 0 (покой) до 1 (полная скорость). Походка должна ускоряться или замедляться плавно.

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

Шаг 3: Запекаем анимацию для экспорта

Unity не понимает Animation Nodes, поэтому нам нужно превратить процедурную анимацию в ключевые кадры.

3.1 Запекание в Blender

  • Выдели скелет и перейди в панель Animation Nodes.
  • Нажми Bake to Keyframes в панели инструментов. Укажи диапазон кадров (0–120 для 4-секундного цикла при 30 FPS).
  • Blender создаст ключевые кадры для каждой кости. Проверь в Dope Sheet, что они появились.

3.2 Очистка и экспорт

  • В Dope Sheet выдели все ключевые кадры и нажми F-Curve > Clean Keyframes, чтобы убрать лишние данные.
  • Для бесшовного цикла скопируй ключевые кадры (Shift+D) и смести их, чтобы анимация повторялась.
  • Экспортируй модель и анимацию в FBX (File > Export > FBX). В настройках:
    • Укажи Forward Axis как Z Forward и Up Axis как Y Up (стандарт Unity).
    • Включи Bake Animation и задай диапазон кадров (0–120).
    • Отключи Add Leaf Bones, чтобы избежать лишних костей.

Сохрани файл как CharacterWalk.fbx.

Шаг 4: Импорт и настройка в Unity

Теперь перенесём нашего шагающего героя в Unity и заставим его двигаться в игре.

4.1 Импорт FBX

  • Открой Unity и создай новый 3D-проект.
  • Перетащи CharacterWalk.fbx в папку Assets.
  • В Inspector установи тип Rig на Humanoid и нажми Apply. Unity распознает скелет.
  • Проверь вкладку Animation — цикл ходьбы должен быть импортирован как клип («CharacterWalk»).

4.2 Настройка Animator

  • Создай Animator Controller (правый клик в Project > Create > Animator Controller).
  • Добавь компонент Animator к персонажу в сцене.
  • Присвой Animator Controller компоненту Animator.
  • Открой окно Animator и перетащи клип «CharacterWalk» в него, создав состояние для ходьбы.

4.3 Управление игроком

  • Создай скрипт PlayerMovement.cs:
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f;
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        float moveInput = Input.GetAxisRaw("Horizontal");
        transform.Translate(Vector3.forward * moveInput * moveSpeed * Time.deltaTime);

        animator.SetBool("isWalking", moveInput != 0);
    }
}
  • Прикрепи скрипт к персонажу.
  • В Animator Controller создай параметр Bool с именем isWalking.
  • Настрой переход от Entry к «CharacterWalk» с условием isWalking = true и обратно, когда isWalking = false.

Что происходит?: Скрипт двигает персонажа по горизонтали (клавиши A/D или стрелки) и включает анимацию ходьбы при движении.

4.4 Тестирование

  • Нажми Play в Unity и проверь движение персонажа. Если ноги скользят, включи Root Motion в клипе анимации или настрой Apply Root Motion в Animator.

Шаг 5: Полировка анимации

Давайте добавим изюминку, чтобы походка выглядела ещё живее.

5.1 IK для ног в Unity

Инверсная кинематика (IK) приклеивает ноги к поверхности, даже на неровной местности.

  • В Unity включи IK Pass в настройках слоя Animator Controller.
  • Создай скрипт FootIK.cs:
using UnityEngine;

public class FootIK : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void OnAnimatorIK(int layerIndex)
    {
        animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, 1f);
        animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1f);

        RaycastHit hit;
        if (Physics.Raycast(animator.GetIKPosition(AvatarIKGoal.LeftFoot) + Vector3.up, Vector3.down, out hit))
        {
            animator.SetIKPosition(AvatarIKGoal.LeftFoot, hit.point);
        }
        if (Physics.Raycast(animator.GetIKPosition(AvatarIKGoal.RightFoot) + Vector3.up, Vector3.down, out hit))
        {
            animator.SetIKPosition(AvatarIKGoal.RightFoot, hit.point);
        }
    }
}
  • Прикрепи скрипт к персонажу. Он использует лучи, чтобы ноги «прилипали» к земле.

5.2 Покачивание головы в Blender

Вернись в Blender и добавь лёгкое кивание головой.

  • В дереве Animation Nodes добавь узел Sine Wave с амплитудой 0.01 и частотой 1.
  • Соедини его с Rotation X кости головы.

Запеки анимацию заново и экспортируй FBX.

5.3 Блендинг анимаций в Unity

Для плавности добавим переходы между анимациями (например, покой и ходьба).

  • В Animator Controller добавь клип Idle (импортируй или создай в Blender).
  • Создай Blend Tree (правый клик > Create State > From New Blend Tree).
  • В Blend Tree добавь клипы Idle и Walk, задай параметр Float с именем Speed.
  • Обнови скрипт PlayerMovement.cs:
animator.SetFloat("Speed", Mathf.Abs(moveInput));

Шаг 6: Оптимизация и финальные штрихи

Ваш персонаж шагает как профи, но давайте сделаем анимацию ещё лучше.

6.1 Оптимизация

  • Blender: Уменьши количество ключевых кадров (Graph Editor > F-Curve > Clean Keyframes).
  • Unity: Сожми анимацию в Inspector (Compression > Optimal).
  • Используй низкополигональную модель (до 10,000 треугольников) для мобильных игр.

6.2 Визуальные эффекты

  • В Unity добавь Particle System для пыли от шагов.
  • Создай скрипт для звука шагов:
public class FootstepSound : MonoBehaviour
{
    public AudioClip footstepClip;
    private AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    void PlayFootstep()
    {
        audioSource.PlayOneShot(footstepClip);
    }
}
  • В Blender добавь Animation Events на кадрах контакта ног с землёй, чтобы запускать звук.

6.3 Тестирование на местности

  • Создай тестовую сцену в Unity с холмами и лестницами.
  • Настрой Character Controller для обработки столкновений.
  • Подправь скрипт IK для плавного размещения ног.

Устранение проблем

  • Анимация дергается в Unity: Проверь настройки импорта FBX (отключи Import BlendShapes) и убедись, что частота кадров совпадает (30 FPS).
  • Ноги скользят: Включи Root Motion в клипе или настрой Apply Root Motion в Animator.
  • Blender крашится с Animation Nodes: Уменьши сложность узлов или обнови аддон.
  • IK не работает: Проверь, что скелет настроен как Humanoid в Unity и включён IK Pass.
В&amp;nbsp;результате должно получиться что-то подобное
В результате должно получиться что-то подобное

Почему это важно для вашей игры

Процедурная анимация — это не просто трюк, а способ выделить вашу игру. Персонаж, который естественно шагает по любому рельефу или реагирует на действия игрока, создаёт ощущение живого мира. Для инди-разработчиков это экономия времени: вместо анимации каждого движения вы создаёте систему, которая работает сама. Вспомните No Man’s Sky — там существа двигаются процедурно, создавая тысячи уникальных походок. Или Spider-Man: Miles Morales, где процедурная анимация делает полёты на паутине такими плавными. Ваша игра может быть скромнее, но эффект тот же: динамика погружает игроков.

Куда двигаться дальше

Хотите большего? Вот идеи:

  • Физика ragdoll: Добавь в Unity систему ragdoll для падений.
  • Покойные анимации: Создай в Blender процедурное дыхание или шевеление.
  • Состояния: Расширь Animator Controller для прыжков или бега.
  • Шейдеры: Комбинируй анимацию костей с шейдерами для эффектов ткани.

Изучай Blender Guru для риггинга или Unity Learn для анимаций.

Заключение

Вы только что создали процедурную походку, которая оживляет вашего персонажа! От настройки скелета в Blender до динамических движений с Animation Nodes, запекания кадров и интеграции в Unity — вы освоили мощный инструмент. Это не просто анимация, а система, которая растёт вместе с вашей игрой. Теперь экспериментируйте: добавьте персонажу харизмы, заставьте его танцевать или шагать по марсианским дюнам. Делитесь прогрессом или участвуйте в геймджемах, чтобы показать своё творение.

Удачи в создании игр, и пусть ваши персонажи всегда шагают с душой! 🚀

Александр Антипин, руководитель студии Metabula Games


Теги

Лучшие комментарии

Читай также