Создание анимации в Unity3d на C#


Если вы читали мои предыдущие статьи по Unity3D, то должны помнить, что мы научились создавать объекты на 3D-сцене, а также управлять с помощью C# ими. Однако, если вы их не читали, то не волнуйтесь: эта статья вам даст все необходимые знания для создания независимого проекта на Unity3D. Итак, в этом материале мы научимся создавать простую анимацию на Unity3D, а также запускать её с помощью C#.

Настройка сцены

Я собираюсь использовать Unity3D версии 5.5.1f1. Для редактирования скриптов на C# подойдет любой текстовый редактор, лично я предпочитаю Notepad++, но можно задействовать как встроенные средства юнити, так и обычный блокнот.

Первое, что нам нужно, это новый проект в Unity, и на рисунке 1 мы видим настройки, которые я выбрал для этого примера. Вы также заметите, что в окне настройки проекта есть вкладка «Начало работы»; она приведет вас к отличным учебникам, примерам и массовому сообществу Unity – именно там можно также всему научиться, если вы хорошо владеете английским языком.

Настройка нашего проекта Unity3d
Рисунок 1: Настройка нашего проекта

Затем нам нужно добавить 3D-объект в нашу сцену, которую мы будем анимировать. Один из способов сделать это - просмотреть представление иерархии, которое по умолчанию находится слева от основной рабочей области.

Создание 3D-объекта в нашей сцене
Рисунок 2: Создание 3D-объекта в нашей сцене

Как мы видим на рисунке 2, я добавил куб к сцене. Далее нам нужен контроллер анимации, анимация, а также скрипт C#. В представлении активов внизу сцены давайте создадим все, что нам нужно, щелкнув правой кнопкой мыши на панели, затем:

  • Create -> Animation controller
  • Create -> Animation
  • Create -> C# Script
Добавление анимации и анимационного контроллера (контроллера персонажа)
Рисунок 3: Добавление анимации и анимационного контроллера (контроллера персонажа)

Как только они появятся в нашей сцене, все должно выглядеть так, как показано на рисунке 4:

Созданные элементы
Рисунок 4: Созданные элементы

Прежде чем идти дальше, давайте озвучим то, что мы пытаемся достичь. И как мы собираемся сделать это. Мы создадим нашу сцену, используя 3D-объект в центре - наш куб, а также мы хотим, чтобы куб вращался по левому нажатию кнопки мыши.

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

Контроллер анимации с созданными состояниями
Рисунок 5: Контроллер анимации с созданными состояниями

Два состояния, которые я уже создал, называются состояниями «Normal» и «MouseDownState». Обратите внимание, что сначала я создал нормальное состояние, и вы можете создать состояние, щелкнув правой кнопкой мыши, затем нажмите «Create State», а затем «Empty».

Теперь, если вы посмотрите между двумя созданными состояниями, мы увидим две соединяющие белые линии со стрелками на них. Они называются Tranisations, и для их создания щелкните правой кнопкой мыши состояние и выберите «Make Transition». Далее надо немного отредактировать: нажмите переход и снимите флажок «Has Exit Time». На рисунке 6 показан пример того, что вы увидите:

Выбранный переход и Has Exit Time
Рисунок 6: Выбранный переход и Has Exit Time

Если убрать галочку с опцией «Выйти», это не позволит автоматически перейти на «Нормальное» состояние «MouseDownState». Теперь, когда у нас есть базовый макет нашего контроллера, давайте создадим анимацию. Но, прежде чем мы отходим от представления контроллера анимации, нам нужно добавить анимацию в «MouseDownState».

Выбрав состояние, перетащите анимацию, созданную в assets, в поле «Motion», показанное на инспекторе. Вернитесь к нашему представлению сцены, выберите куб в сцене; затем перетащите контроллер анимации на куб. Сделайте то же самое для сценария. А теперь - при выбранном кубе - нажмите кнопку «add component» внизу панели инспектора. Когда появится диалоговое окно компонентов, нажмите «Physics», затем выберите «Box collider». Этот коллайдер поможет нам определить, действительно ли произведен щелчок мышью на 3D-объекте.

Если все вышеперечисленное было сделано, то вы должны увидеть эти компоненты в списке инспекторов, которые у вас есть как показано на рисунке 10 Теперь мы готовы создать простую анимацию вращения. В меню в верхней рабочей области нажмите «Window», а затем «Animation». Комбинация клавиш для этого - Ctrl + 6. Если у вас нет выбранного куба, сделайте это сейчас. Как только вы это сделаете, вы должны увидеть, что окно анимации становится активным, с выбранной анимацией. Взгляните на рисунок 7, а затем добавьте свойство для анимации вращения.

Окно анимации, с добавлением свойства Rotation в нашем списке анимаций
Рисунок 7: Окно анимации, с добавлением свойства Rotation в нашем списке анимаций

Если вы нажмете кнопку «Add Property», вы увидите всплывающее окно, которое у нас есть. Оттуда добавьте свойство вращения; теперь давайте приступим к созданию ключевого кадра, который завершит анимацию. Сначала разверните свойство и переместите маркер текущего времени в позицию по вашему выбору (красная линия), а затем отредактируйте одну из позиций x, y или z так:

Создание ключевого кадра в нашей временной строке анимации
Рисунок 8: Создание ключевого кадра в нашей временной строке анимации

Хочу заметить, что использование временной шкалы очень похоже на то, как мы работали с ней при создании анимированного баннера html5 в Google Web Designer или анимации на флеш в Macromedia Flash Professional 8.

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

Код на C#

// Используйте это для инициализации
void Start () {
}
 
// Обновление вызывается один раз за кадр
void Update () {
 
   // Определить, нажата ли левая кнопка мыши
   if (Input.GetMouseButtonDown (0))
   {
     var ray = Camera.main.ScreenPointToRay
         (Input.mousePosition);
      RaycastHit raycastHit;
 
      if (Physics.Raycast (ray, out raycastHit, 100))
      {
         // получаем коллайдер, на который щелкнули
         var colliderHit = raycastHit.collider;
         // получить объект игры, к которому привязан коллайдер
         var gameObjectHit = colliderHit.gameObject;
 
         // получить аниматор gameObjects
        var animator =
            GameObjectHit.GetComponent <Animator> ();
 
         // воспроизведение анимации
         animator.Play ("MouseDownState");
      }
   }
}
Из кода видно, что можно получить многие объекты, свойства и все остальное, что нам нужно для построения нашей игры/приложения. Если вы затем запустите сцену и щелкните 3D-объект, мы увидим вращение.



Примечание

Если вы только начинаете работать с Unity3D, то вам придется многому научиться. Но, когда вы освоите основы, все будет весело, даже если вы просто используете Unity в свое свободное время. Есть вопросы? Пишите.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, Unity3d, анимация, си шарп




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.

Комментарии

Ирина: Спасибо большое) Помогли
Юрий: Пожалуйста) Но вы бы хоть написали - чем именно помогли?
Макс: Урок мне понравился своей простотой, местами правда надо додумывать немного. А вот в скрипте пришлось исправлять вручную Заглавные буквы (может у меня версия проги такая придирчивая, но я думаю у большинства будет такая проблема), иначе Юнити слова не распознает (слова Void Var If Animator - не распознаны). Спасибо за урок.
Юрий: Спасибо за отзыв. Исправил заглавные буквы.



Урок 16. Введение в контроллеры Laravel
Анализ алгоритмов: классификация
Как сделать скопированный текст нечитаемым или убираем пробелы из буфера обмена с помощью javascript