Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unity_в_действии_Джозеф_Хокинг_Рус.pdf
Скачиваний:
83
Добавлен:
21.06.2022
Размер:
26.33 Mб
Скачать

182      Глава 7. Игра от третьего лица: перемещение и анимация игрока

и в случае иерархических цепочек: корневым называется объект, с которым связаны все остальные объекты. Соответственно, корень анимации можно представить как основу персонажа, а все остальное двигается относительно этой основы. Для настройки этого объекта предоставляется несколько параметров, возможно, вы захотите поэкспериментировать, присваивая им различные значения в процессе работы над собственными вариантами анимации. Для наших же целей установите значения Body Orientation, Center Of Mass и Center Of Mass.

Щелчок на кнопке Apply добавит к персонажу анимационный клип idle. Выполните указанные операции еще два раза: клип walk должен начинаться в кадре 144 и заканчиваться в кадре 169, а клип run — начинаться в кадре 171 и заканчиваться в кадре 190. Все остальные параметры сделайте такими же, как у клипа idle, так как это тоже зацикленная анимация.

Четвертым станет анимационный клип jump, и его параметры будут несколько отличаться. Прежде всего, на этот раз нам нужен не цикл, а неподвижная поза, поэтому устанавливать флажок Loop Time не нужно. Введите в поля Start и End значения 190.5 и 191 соответственно; эта поза определена в одном кадре, но в Unity требуются различные значения параметров Start и End. Из-за введенных значений анимация в расположенном снизу окне предварительного просмотра будет выглядеть не совсем корректно, но на положении персонажа во время игры это не скажется.

Щелкните на кнопке Apply, чтобы подтвердить создание новых анимационных клипов, и переходите к следующему этапу — созданию контроллера анимации.

7.4.2. Создание контроллера для анимационных клипов

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

Может показаться странным, что мы пользуемся дополнительными средствами — помещаем между кодом и воспроизведением анимации абстракцию в виде контроллера. Скорее всего, раньше вы работали с системами, в которых анимация воспроизводилась непосредственно из кода; кстати, именно таким образом работала старая система Legacy, пользуясь вызовами вида Play("idle"). Но непрямой способ позволяет применять анимацию к разным моделям, не ограничиваясь воспроизведением анимации, непосредственно связанной с конкретной моделью. В этой главе мы не будем пользоваться данным преимуществом, поэтому просто запомните, что такая возможность существует. Получить готовую анимацию можно из разных источников, в том числе сотрудничая с аниматорами или покупая отдельные ролики в интернет-магазинах (например, в Asset Store для Unity).

Начните с создания нового контроллера-аниматора (в меню Assets выберите команду Create Animator Controller — не перепутайте с пунктом Animation, который создает ресурсы совсем другого типа). На вкладке Project появится значок, украшенный забавной сеткой линий (рис. 7.15); присвойте ему имя player. Выделите персонаж в сцене, и вы увидите, что у него появился новый компонент Animator; он есть у любой допускающей анимацию модели наряду с компонентом Transform и любыми другими

7.4. Анимация персонажа      183

добавленными вами компонентами. У этого компонента есть поле Controller, предназначенное для привязки контроллера-аниматора. Перетащите на это поле только что созданный контроллер player (обязательно сбросьте флажок Apply Root Motion).

К-а а

С а Root Motion,

( а а Project)

а• • player ƒ

 

„а … † ‡

 

а а‡ ˆ. В ‹Œ

 

ƒ•а…Œ а †

 

ƒ…, ˆ•а

Рис. 7.15. Контроллер-аниматор и компонент Animator

Контроллер-аниматор представляет собой дерево связанных узлов (именно этим объясняется рисунок на значке данного ресурса), просмотр и управление которыми осуществляются на вкладке Animator. Эта вкладка, отображенная на рис. 7.16, показывает еще одно представление сцены, аналогично вкладкам Scene или Project, но по умолчанию она закрыта. Выберите в меню Window команду Animator (не перепутайте с окном Animation). На открывшейся вкладке вы увидите сеть узлов, принадлежащую выделенному в данный момент контроллеру (или контроллеру-аниматору выделенного персонажа).

З а а • • а ,

а • • а а . П • а а

†а • а

Ка а а а

а а . Ка

а а , а а

а а а.

(О а •

а а а а а • ,

а а а •.)

С • а а• « • а ». О • а а , а • A B

Рис. 7.16. Вид нашего контроллера-аниматора на вкладке Animator

СОВЕТ  Напоминаю, что вы можете перемещать вкладки внутри редактора Unity, располагая их в нужных вам местах и формируя интерфейс по собственному вкусу. Мне нравится, когда вкладка Animator находится рядом с окнами Scene и Game.

Изначально мы видим только два существующих по умолчанию узла: Entry и Any State. Узлом Any State мы пользоваться не будем. Вместо этого создадим новые узлы, перетаскивая анимационные клипы. На вкладке Project щелкните на стрелке, расположенной

184      Глава 7. Игра от третьего лица: перемещение и анимация игрока

на значке модели персонажа, чтобы посмотреть содержимое этого ресурса. В числе прочего вы увидите и определенные вами анимационные клипы, как показано на рис. 7.17. Перетащите их на вкладку Animator. Клип walk пока не трогайте (он пригодится для других проектов), ограничьтесь клипами idle, run и jump.

Щ а ,

а

И а а

а а а

Рис. 7.17. Раскрытый ресурс на вкладке Project

Щелкните правой кнопкой мыши на узле Idle и выберите команду Set As Layer Default State. Узел станет оранжевым, в то время как все остальные останутся серыми; состояние анимации, предлагаемое по умолчанию, представляет собой место, в котором начинается сеть узлов, пока игра не внесет свои коррективы. Узлы нужно будет соединить друг с другом, обеспечивая переходы между состояниями анимации; щелкните на узле правой кнопкой мыши, выберите команду Make Transition и начните перетаскивать стрелку в направлении другого узла. Связь образуется щелчком на этом узле. Соедините узлы в соответствии с образцом на рис. 7.16 (в большинстве случаев вам требуется переход туда и обратно, исключением является переход от узла jump к узлу run). Эти линии переходов, определяющие связи состояний анимации друг с другом, во время игры будут контролировать переходы из одного состояния в другое.

ВНИМАНИЕ  В процессе работы на вкладке Animator может появиться ошибка AnimationState­­ Machine.TransitionEditionContext.BuildNames. Просто перезапустите Unity; это не представляющий опасности сбой.

Переходы обусловливаются набором управляющих значений, которые нам нужно создать. В верхнем левом углу рис. 7.16 видна вкладка Parameters; перейдите на нее, чтобы увидеть панель добавления параметров с кнопкой в виде значка + (плюс). Добавьте параметр типа float с именем Speed и параметр типа Boolean с именем Jumping. Наш код будет менять эти значения, причем они послужат триггерами переходов между состояниями анимации. Выделите линию перехода, чтобы увидеть ее параметры на панели Inspector, как показано на рис. 7.18.

Именно здесь мы указываем, каким образом должны меняться состояния анимации при изменении параметров. Например, выделите переход Idle-Run, чтобы отредактировать условия его возникновения. В свитке Conditions выберите вариант Speed, Greater и 0.1. Сбросьте флажок Has Exit Time (он заставляет клип воспроизводиться на протяжении всей игры, вместо того чтобы завершиться сразу же после перехода). Затем щелкните на стрелке рядом с названием раздела Settings, чтобы увидеть меню целиком; другие переходы должны быть в состоянии прерывать этот, поэтому выберите в раскрывающемся списке Interruption Source вариант Current State. Повторите эту операцию для всех переходов, перечисленных в табл. 7.1.

7.4. Анимация персонажа      185

 

Д а

 

а

 

,

 

а

Щ а ,

а а

 

 

 

а а

И а а ,

 

а

 

а а

 

Э а •

 

• а

 

( •

 

а а•

 

а Alt)

 

У а

 

а а

 

а а а

 

Рис. 7.18. Параметры перехода на панели Inspector

Таблица 7.1. Условия всех переходов для данного контроллера анимации

Переход

Условие

Прерывание

 

 

 

Idle-Run

Speed больше чем 0.1

Current State

 

 

 

Run-Idle

Speed меньше чем 0.1

None

 

 

 

Idle-Jump

Jumping = true

None

 

 

 

Run-Jump

Jumping = true

None

 

 

 

Jump-Idle

Jumping = false

None

 

 

 

В дополнение к параметрам, имеющим вид меню, вам предоставляется еще и визуальный интерфейс, расположенный, как показано на рис. 7.18, непосредственно над списком Condition. Этот график позволяет визуально корректировать продолжительность перехода. Заданное по умолчанию время перехода прекрасно подходит для переходов из Idle в Run и обратно, а вот переходы в состояние Jump и из него должны совершаться быстрее. Окрашенная область графика показывает, сколько времени займет­ переход; одновременное нажатие клавиши Alt и левой кнопки мыши даст возможность панорамирования графика, а клавиша Alt с правой кнопкой мыши позволит выполнить масштабирование (аналогичные способы управления применяются для представления Scene). Воспользуйтесь кнопками со стрелками над окрашенной областью, чтобы установить до менее 4 миллисекунд время всех трех связанных с прыжками переходов.

Напоследок можно усовершенствовать анимационную сеть, по очереди выделяя узлы и корректируя порядок переходов. На панели Inspector будет отображаться список всех переходов к выделенному узлу и от него; вы можете перетаскивать элементы