Это статья про то как я с нулём изначальных навыков начал делать анимации в своей игре.
1. Установка необходимых компонентов
В Unity открываем Window -> Package Manager
В Package Manager выбираем Unity Registry
Выбираем необходимые компоненты и жмём Install
В нашем случае нам необходимы:
- 2D Animation (для анимации)
- 2D IK (тоже для анимации)
- 2D PSD Importer (для импортирования файлов с сохранением всех слоёв)
2. Подготовка изображения
Нам необходимо изображение в PhotoShop, либо в другом редакторе со слоями и возможностью сохранения в формате *.PSB
Изображение разбиваем на слои которые мы хотели бы вращать и двигать относительно друг друга в Unity
Сохраняем в формате *.PSB
3. Подготовка к анимации
Загружаем изображение в проект (как видно на скриншоте разбивка на слои сохранилась)
Жмём Sprite Editor
Выбираем Skinning Editor
С помощью инструментов Bones размещаем кости так, как мы бы хотели, чтобы изображение двигалось. Кости создаются иерархически, все кости дочки (которые как бы вложены или принадлежат другой кости) следуют за костью родителем (той которой они принадлежат, из которой следуют)
- Preview Pose - позволяет проверять как будет осуществляться движение
- Edit Bone - позволяет передвинуть, изменить в размерах уже начерченную кость
- Create Bone - позволяет создать новую кость
- Split Bone - разделяет на 2 части уже начерченную кость
Как только кости начертили переходим в Auto Geometry и жмём Generate For All Visible
Теперь наш рисунок будет следовать за костями, но будет это делать не так как бы мы этого хотели
Чтобы убрать влияние лишних костей на объект, либо добавить нужных, переходим в Bone Influence и редактируем какие кости должны влиять на наш слой
Если добавить несколько костей на слой, то с помощью их его можно будет деформировать, с помощью Weight Slider можно изменить влияние той или иной кости на каждую точку слоя (вершина полигона слоя), либо с помощью Weight Brush своеобразной кисти, которой можно более быстро изменять влияние костей сразу на несколько точек
4. Анимация
Перемещаем объект на сцену и добавляем компонент (Add Component) - Animator
В папке проекта жмём Create -> Animator Controller и создаём контроллер, что будет управлять анимацией и Create -> Animation сами анимации (В моём случае Idle - состояние покоя и 3 другие анимации какие-то действия)
Прикрепляем наш Controller в Animator
По двойному клику на Controller открывается такое окно
Перетаскиваем в него все наши анимации
В этом окне можно задать Default State (анимация которая будет проигрываться первой), она оранжевая, в моём случае - Idle
С помощью Make Transition можно задать какая из какой анимации будет запускаться. Выглядят они как стрелки.
Управлять же переходами можно с помощью параметров (Parameters), которые можно изменять из кода. Я использую 3 триггера Attack/Buff/Block.
Параметры можно добавлять на стрелки переходов (Conditions)
В моём случае в коде с помощью Animator.SetTrigger("Attack") я запускаю анимацию Attack, а в дальнейшем, как она проигрывается начинает проигрываться анимация Idle. А так как старт запуска анимации начинается с Any State, то анимация проигрываться начинает на любом этапе любой анимации, прерывая её проигрывание (переход же будет всегда плавный, все промежуточные кадры Unity просчитывает само)
Далее открываем Window -> Animation -> Animation (либо Ctrl+6) и жмём на нашего персонажа
На красную круглую кнопку (Record) начинаем запись.
Выбираем время на отрезке, в котором мы хотим задать конечную точку какого-либо движения и вращаем/двигаем кости так как мы бы хотели они располагались в конце движения. Все промежуточные кадры Unity просчитывает само. Теперь мы можем наблюдать движение нашей модельки, нажимая на Play.
5. Звук
С помощью Event в Unity можно запускать выполнение некоторых методов из скриптов. Я это использую в основном для воспроизведения звуков, передавая значение int (индекс воспроизводимого звука)
Мой метод проигрывания внутри игры выглядит так:
Сначала я запрашиваю компонент AudioSource, а потом уже изменяю его параметры, управляю им
- volume - громкость с которой будет воспроизводиться звук (у меня берутся параметры настроек игры и умножаются на случайное значение, чтобы множество одинаковых звуков подряд не звучали 1в1)
- pitch - высота звука (изменение октавы), у меня она изменяется на случайное значение по той же причине, что и громкость
- clip - собственно сам звук, который будет воспроизводиться
- Play() - метод, который немедленно воспроизводит звук
Вот собственно сам этот метод и Audio Source на объекте.
Надеюсь кому-то это оказалось полезным, ну или хотя бы было интересно.
#unity #анимация #разработка #игра #gamedev #костная анимация