На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Создание анимации в 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 - не распознаны). Спасибо за урок.
Юрий: Спасибо за отзыв. Исправил заглавные буквы.



Урок 17. Оператор typeof JavaScript
Пошаговое руководство по верстке на опенкарт. Глава первая: введение и главная страница


© upread.ru 2013-2020
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.