В прошлом посте мы сделали игру, в которой персонаж прыгает по платформам.
В этом посте я расскажу как нам заставить платформы и любые другие объекты игры двигаться, не прибегая к программированию. сделаем мы это с помощью
анимации.
Обратите внимание! если вам проще воспринимать видеоформат, на ютюбе есть сотни уроков по созданию игр, как на русском так и на английском. В этом случае вам могут быть полезны только пункты 1 и 4, т.к. в них описаны теоретические принципы работы с 3д-анимацией.
1.Что такое анимация в 3д программах.1.Что такое анимация в 3д программах.
Вы наверняка видели старые двухмерные диснеевские мультики, вроде белоснежки и золушки. Технология, с помощью которой создавалась такая анимация называется традиционной или покадровой. Как наверно многие знают, принцип такой мультипликации прост - создается множество рисунков(кадров), с одним небольшим отличием. Например у нас есть рисунок пингвинчика и на каждом следующем кадре он чуть чуть меняет положение крыльев. Если быстро сменять одну картинку другой, будет казаться будто пингвин машет крылышками.
традиционная раскадровка
Прорисовывать каждое маленькое движение - достаточно трудоемкая работа и, к счастью, современные технологии позволяют избавиться от таких сложностей, особенно при работе с 3д моделями.
Итак, unity и практически все программы включающие в себя 3д-анимацию следуют упрощенным принципам традиционной анимации. Если точнее - вместо создания всех кадров вручную от нас потребуется создавать только начальный и конечный кадры движения - ключевые кадры или просто ключи.
Смысл в том чтобы показать программе начальное положение объекта и конечное. Все что происходит между этими ключевыми кадрами компьютер достроит сам.
раскадровка unity
Как видите нам нужно отметить для компьютера, что в начале крылышки были опущены, а в конце подняты. Само движение крылышек unity просчитает самостоятельно.
2.Знакомимся с окном анимации. Летающая платформа2.Знакомимся с окном анимации. Летающая платформа
С теорией закончили, перейдем к практике. Я буду описывать порядок действий исходя из предположения что вы выполнили все что написано в предыдущем посте. Если вы не сделали игру платформер и вам просто интересно попробовать анимацию - создайте на сцене любой примитив (например кубик или шар) и работайте с ним.
Итак: Откройте свой проект - для этого в первичном окне unity среди списка проектов выберите тот, где создавали игру:
картинка
Открыв свою игру, полюбуйтесь на нее еще раз. Возможно у вас появятся новые идеи для оформления, не стесняйтесь и реализуйте свои желания, дизайн уровней это один из важнейших элементов в любой игре.
Идем дальше. Нужно открыть новое окно "animation", для этого перейдите во вкладку window и выберите "animation".
картинка
Внимание! Не перепутайте окна animation и animator, хотя они связаны, но выполняют совершенно разные задачи.
Новое окно перекрывает нам вид и вообще неудобно расположено. Любое окно в юнити можно расположить так как вам удобно, для этого нужно нажать на название окна и, не отпуская кнопку мыши, начать его перетаскивать. Перемещаемое окно будет цепляться к ближайшим стенкам.
Расположите окно animation так как на картинке:
картинка
Это может быть немного сложно для новичка, поэтому если не получится расположите окно любым другим способом (например сверху), главное что бы все кнопки было хорошо видно.
Окно анимации работает с объектами которые вы выделили, одним или несколькими (для выделения нескольких объектов одновременно, нужно щелкать по ним левой кнопкой мыши, зажав shift).
Начните с любой платформы. Как только вы щелкните по ней (она выделится оранжевым цветом), в окне "animation" появится кнопочка "create"(создать).
картинка
Как только вы щелкните по кнопке create появится окно сохранения анимации и вас попросят дать ей название. Название следует дать такое, чтобы было понятно что она делает, назовем ее updown, так как наша платформа будет двигаться вверх и вниз.
картинка
Сразу после сохранения в меню ассеты ("assets") появятся две новые иконки - это сама анимация и контроллер анимации. (пока что просто обратите на них внимание, пользоваться ими мы научимся позже, когда освоим визуальное программирование)
читать дальше
В окне animation появится шкала времени и мы наконец сможем начать создавать анимацию.
читать дальше
Белая линия в самом начале временной шкалы анимации это тот кадр с которым мы работаем в данный момент. Перемещая ее (это можно сделать нажав на белую линию и потянув) можно переключаться на любую секунду анимации. словно перемотка видео на ютюбе. Так же это можно сделав задав текущий кадр в квадрате, отмеченным зеленым цветом на картинке.
Первый ключевой кадр запоминает изначальное состояние объекта. Это может быть его положение, угол наклона или размер, а может и все вместе. Так как наша платформа будет опускатся вверх вниз, нам следует записать в ключевой кадр ее положение. Нажмем на кнопки "add property" - "transform", нажав на треугольник слева от transdorm раскроется список из трех строк (Position-положение, Rotation - поворот, Scale - размер), щелкнем по плюсику с права от position и юнити запишет первый ключевой кадр.
добавление первого кадра
результат
Ключевые кадры отмечаются ромбиками на шкале времени. Обратите внимание что помимо первого кадра автоматически был создан еще и последний. Так сделано потому что по умолчанию анимация зациклена(постоянно повторяется) и чтобы это происходило плавно, к концу анимации платформа должна вернуться в тоже состояние, в котором она была вначале.
Перейдем в середину анимации. для этого перетащим нашу белую линию. По умолчанию анимация состоит из 60 кадров, (это легко поменять в квадрате под называнием samples) следовательно середина будет на 30 кадре. Поднимем платформу вверх (или вниз если она была высоко).
Внимание! Здесь и далее я иногда буду использовать слово секунды, для обозначения нужного отрывка на шкале времени, однако на самом деле переключение между кадрами происходит гораздо быстрее одной секунды и вся анимация в целом может иногда занимать не больше 1-2 секунд.
Чтобы добавить новый ключевой кадр, запоминающий положение платформы не нужно нажимать на кнопку add property, достаточно щелкнуть на ромбик с плюсом справа от надписи samples.
читать дальше
Чтобы удалить любой кадр, достаточно щелкнуть по нему (ромбик станет синим) и нажать delete на клавиатуре.
Внимание!Перейдя на нужную секунду, сперва измените объект, а уже потом добавляйте ключевой кадр.
Вот теперь можно посмотреть нашу первую анимацию. Щелкнем по кнопке play(той что находится в меню анимации, а не той что включает режим игры) и посмотрим как платформа будет двигаться вверх вниз.
Возможно вы решите что она двигается слишком быстро или слишком медленно. Это легко поправить. Любой ключ можно переместить на любую секунду. Просто нажмите на ромбик и не отпуская кнопки мыши перетащите его на нужный кадр.
Отлично! Вы можете зайти в игру и попробовать запрыгнуть на движущуюся платформу.
Вы можете попробовать сделать анимацию для других объектов. Например другая платформа может становиться маленькой а потом большой (Создаете ключевые кадры с параметром Scale). А третья вращаться (Создаете ключевые кадры с параметром Rotation).
3.Анимация смены цвета объекта.3.Анимация смены цвета объекта.
Анимация смены цвета происходит аналогично смене положения или любого другого параметра.Однако сам параметр цвета надо искать во вкладке Mesh Renderer->Material._Color.
читать дальше
чтобы поменять цвет выберите нужный кадр, в правом меню (инспектор "инспектор") раскройте компонент Material и выберите нужный оттенок, затем щелкните по кнопке-ромбику, добавляющей новый кадр.
читать дальше
4.Подытожим.
4.Подытожим.
Для создания анимации в любой 3д программе, нужно сперва создать ключевые кадры, первый из которых запомнит конкретную особенность объекта (цвет, место на сцене, наклон, размер и тд) в начале анимации, а все следующие запомнят как эта особенность изменилась в определенный момент времени.
В Unity Это делается по следующему алгоритму:
1.Выбрать параметр (scale, location и тд)
2.Выбрать нужный момент на временной шкале.
3.Изменить объект на сцене по выбранному параметру.
4.Нажать на кнопку, звписывающую новый кадр.
Забегая вперед отмечу, что существует возможность создавать несколько отдельных анимаций для одного объекта, а затем настраивать их так чтобы при определенном событии (например по нажатию кнопки) проигрывалась конкретная анимация. Но для этого нам понадобится освоить несколько новых окон Unity и наконец то использовать визуальное программирование.
Изучением последнего мы займемся в следующем посте.Обратите внимание! Все программы связанные с 3д моделями работают по схожим принципам. Практически везде (во всяком случае мне не встречались другие варианты) используется метод создания ключевых кадров. Поэтому научившись создавать анимацию в unity вам не составит труда освоить такую же функцию в программах для 3д моделирования или видео-редакторах.
Я конечно не эксперт, и в основном пытался анимации делать в Блендере, так что не сказу за всю Одессу, но принцип в Блендере именно такой - Ключевые кадры и интерполяция между ними.
Разве что в более серъезных программах есть еще возможность разные варианты интерполяции. В том числе например Блендер по умолчанию использует интерполяцию сплайном (гладкой функцией) что не всегда удобно...
Ну и далее высший пилотаж типа Inverse Kinematic (которую Unity в бесплатном вариате не умеет)... но это уже больше к думаноидным анимациям относится...
Предланаю темой следующего туториала сделать частицы (Particle System).
на мой взгляд вообще разумней делать анимацию в программах для этого предназначенных, типа Blender и переносить в движок, возможность делать анимацию unity это скорее подспорье. как те же примитивы - по хорошему надо использовать модели, сделанные в других программах, но если лень или задача не слишком сложная то хватит стандартных примитивов Unity.
Предланаю темой следующего туториала сделать частицы (Particle System).
тема интересная, но думаю ее следует давать после terrain, к тому же хочу наконец рассказать о визуальном программировании, по нему почти нет уроков на русском.
В целом да, но есть ситуации когда анимация должна реагировать на игровой контекст. Например если нужно анимировать как персонаж протягивает руку к объекту чтобы его подобрать ((Теоретически это конечно можно сделать спешиванием нескольких анимаций через BlendTree но у меня все никак нуки не дойдут это проверить)), или когда нужно чтобы шагая по лестнице персонаж наступал именно на ступеньки, а не между ними.
www.youtube.com/watch?v=LNidsMesxSE
Видос на тему... Правда он в качестве игрового движка использует Blender... Да. Так тоже можно.
о таком варианте не подумала. интересное решение)
Видос на тему... Правда он в качестве игрового движка использует Blender... Да. Так тоже можно.
я пробовала блендеровский движок, но после юнити уже сложно переключиться. с другой стороны многие фишки которые можно красиво реализовать в блендере, в юнити вообще сделать нельзя, и из блендера они не переносятся.
спасибо за видео)