- PVSM.RU - https://www.pvsm.ru -

Оптимизация анимаций в Unity3D

Использование покадровых анимаций в Unity3D

Наверняка вы заметили, что создав новую анимацию в Unity 5 сразу размещается ссылка на спрайт компонента SpriteRenderer. Unity так и зовёт выделить заготовленные кадры и перетащить их в окно Animation.

Оптимизация анимаций в Unity3D - 1 [1]

Пара движений мышкой и новая анимация украшает вашу игру. Но на 1 секунду ролика нужно 12 — 30 кадров. А если персонаж выполняет десяток различных движений: бегает, читает, сажает, поливает, играет, загорает, и т. д. то продолжительность всех анимаций переваливает за минуту, а кадров за тысячу. А персонаж не единственный анимированный объект на уровне. Вот мы и получили что не особо сложная сцена грузится дольше минуты, а Unity начинает слетать из-за перерасхода оперативной памяти. Да, конечно можно используя встроенный в Unity SpritePacker упаковать спрайты в атласы, но это даёт лишь незначительный результат и улучшение производительности на 10 — 20%.

Оптимизация анимаций в Unity3D - 2 [1]

Замена покадровых анимаций скелетными

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

Оптимизация анимаций в Unity3D - 3 [1]

Анимация получается за счет движений этой модели. Не пугайтесь, на самом деле всё просто! Есть несколько инструментов для создания скелетных 2d анимаций для юнити: Spine [2], DragonBones [3], Anima2D [4], Adobe Flash [5] и др.
Т.к. наш художник делал все анимации во Flash для нас лучше всего подходил GAF [6].

Импорт анимаций из Flash в Unity3D

  1. Импортируем GAF из Unity AssetStore [7];
  2. Перетаскиваем файл *.swf в окно конвертора;
  3. Создаём объект и настраиваем его. Все настройки интуитивно понятны:

Оптимизация анимаций в Unity3D - 4 [1]

Анимации создаются автоматически, по разметке сделанной во Flash.

Для запуска нужных анимаций используем скриптинг:

using UnityEngine;
using GAF.Core;//Используем пространство имен GAF

public class Mouse : MonoBehaviour
{
  //Объявляем и проставляем в инспекторе ссылку 
  [SerializeField] private GAFMovieClip GAFMovieClip;
  
  void Update ()
  {
    if (Input.GetKeyDown(KeyCode.RightArrow))//При нажатии кнопки "вправо"
      GAFMovieClip.setSequence("run", true);//Запускаем клип run циклично
  }
}

Настройка переходов в Unity Animator

В Pro-версии GAF [8] есть возможность использовать родной Unity-аниматор, что сделает разработку значительно проще. Однако нужно помнить что наш тип анимаций не поддерживает смешивание. Unity по умолчанию включает смешивание клипов. Так у нас анимации могут покорежиться на переходах между клипами. Чтобы анимации работали гладко отключаем смешивание клипов:

Оптимизация анимаций в Unity3D - 5 [1]

Редактирование анимационных клипов

Если окажется что во Flash вы не создали нужных клипов их можно собрать прямо в Unity, вызывая функцию updateToFrameAnimator() и указывая в качестве параметра нужный кадр.

Автор: BoberUnity

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/unity3d/245318

Ссылки в тексте:

[1] Image: http://radikal.ru

[2] Spine: http://ru.esotericsoftware.com/

[3] DragonBones: http://dragonbones.com

[4] Anima2D: https://anima2d.com/

[5] Adobe Flash: https://www.adobe.com/ru/products/animate.html

[6] GAF: https://gafmedia.com/

[7] GAF из Unity AssetStore: https://www.assetstore.unity3d.com/en/#!/content/13593

[8] Pro-версии GAF: https://www.assetstore.unity3d.com/en/#!/content/26880

[9] Источник: https://habrahabr.ru/post/322280/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox