Создание анимации в Unity3d на C#
Если вы читали мои предыдущие статьи по Unity3D, то должны помнить, что мы научились создавать объекты на 3D-сцене, а также управлять с помощью C# ими. Однако, если вы их не читали, то не волнуйтесь: эта статья вам даст все необходимые знания для создания независимого проекта на Unity3D. Итак, в этом материале мы научимся создавать простую анимацию на Unity3D, а также запускать её с помощью C#.
Настройка сцены
Я собираюсь использовать Unity3D версии 5.5.1f1. Для редактирования скриптов на C# подойдет любой текстовый редактор, лично я предпочитаю Notepad++, но можно задействовать как встроенные средства юнити, так и обычный блокнот.
Первое, что нам нужно, это новый проект в Unity, и на рисунке 1 мы видим настройки, которые я выбрал для этого примера. Вы также заметите, что в окне настройки проекта есть вкладка «Начало работы»; она приведет вас к отличным учебникам, примерам и массовому сообществу Unity – именно там можно также всему научиться, если вы хорошо владеете английским языком.
Рисунок 1: Настройка нашего проекта
Затем нам нужно добавить 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 показан пример того, что вы увидите:
Рисунок 6: Выбранный переход и Has Exit Time
Если убрать галочку с опцией «Выйти», это не позволит автоматически перейти на «Нормальное» состояние «MouseDownState». Теперь, когда у нас есть базовый макет нашего контроллера, давайте создадим анимацию. Но, прежде чем мы отходим от представления контроллера анимации, нам нужно добавить анимацию в «MouseDownState».
Выбрав состояние, перетащите анимацию, созданную в assets, в поле «Motion», показанное на инспекторе. Вернитесь к нашему представлению сцены, выберите куб в сцене; затем перетащите контроллер анимации на куб. Сделайте то же самое для сценария. А теперь - при выбранном кубе - нажмите кнопку «add component» внизу панели инспектора. Когда появится диалоговое окно компонентов, нажмите «Physics», затем выберите «Box collider». Этот коллайдер поможет нам определить, действительно ли произведен щелчок мышью на 3D-объекте.
Если все вышеперечисленное было сделано, то вы должны увидеть эти компоненты в списке инспекторов, которые у вас есть как показано на рисунке 10 Теперь мы готовы создать простую анимацию вращения. В меню в верхней рабочей области нажмите «Window», а затем «Animation». Комбинация клавиш для этого - Ctrl + 6. Если у вас нет выбранного куба, сделайте это сейчас. Как только вы это сделаете, вы должны увидеть, что окно анимации становится активным, с выбранной анимацией. Взгляните на рисунок 7, а затем добавьте свойство для анимации вращения.
Рисунок 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.
Комментарии
Ирина: Спасибо большое) Помогли
Юрий: Пожалуйста) Но вы бы хоть написали - чем именно помогли?
Макс: Урок мне понравился своей простотой, местами правда надо додумывать немного. А вот в скрипте пришлось исправлять вручную Заглавные буквы (может у меня версия проги такая придирчивая, но я думаю у большинства будет такая проблема), иначе Юнити слова не распознает (слова Void Var If Animator - не распознаны). Спасибо за урок.
Юрий: Спасибо за отзыв. Исправил заглавные буквы.