• Increase font size
  • Default font size
  • Decrease font size
  • default color
  • cyan color
  • red color
Система передвижения
Автор: Administrator   
27.05.2011 22:55

Данное руководство поможет Вам обеспечить анимацию передвижения, само передвижение объекта в любом направлении и на любой поверхности.

Файлы

Перед началом урока скачайте данные файлы

http://unity3d.com/support/resources/files/LocomotionSystem.zip

 

Первые шаги

  • Перетащите модель Hero на сцену или вставьте его через меню Assets > Characters > Hero Artwork > Hero. Установите position персонажа в (0, 0, 0) и scale(1,1,1).
  • Создайте Куб с коллайдером(collider) под персонажем. Пройдя в меню: GameObject > Create Other > Cube. Выставите позицию(position) и масштаб(scale), чтобы сделать из куба - пол. Добавьте так же источник света.
  • Добавьте Character Controller компонент для обеспечения коллизий. Выставьте нужные значения параметров.
  • Добавьте Normal Character Motor script (находится Assets > Character Controller Scripts > NormalCharacterMotor) к персонажу для обеспечения движения.
  • Добавьте Platform Character Controller script (находится Assets > Character Controller Scripts > PlatformCharacterController) к персонажу для обеспечения входных данных.

Вы так же можете использовать свои скрипты вместо данных.

  • Удостоверьтесь, что коллайдер(зеленый контур) от Character Controller не пересекает поверхность пола. Запустите и проверьте нажав Play.
  • Сейчас Вы можете передвигаться посредством клавиш и перемещать модель Hero в разных направлениях, хотя сопроваждающей анимации как таковой нет.

Использование системы передвижения

Давайте воспользуемся системой передвижения

  • Для начала персонаж должен иметь Animation компонент (если нет то что-то не так). Отключаем опцию Play Automatically.
  • Добавляем Leg Controller скрипт к персонажу, он находится Assets > Locomotion System > LegController. Это должно быть на том же игровом-объекте, который имеет Animation компонент.
  • Установить значение Ground Plane Height равное 0. Зеленый гизмо должен появиться на уровне ног персонажа. Для Hero высота над плоскостью земли равна 0.(Эта опция служит для того, чтобы показать, где должен объект сопрекасаться с землей)
  • Перетащите idle(Стоит) анимацию на переменную Grounded Pose. Чтобы быстро найти анимации в проекте кликните на animation clip в Animation и Unity тут же найдет его в ресурсах проекта. Для Hero анимация называется Idle.
  • Оставьте переменную Root Bone пустой.
  • Раскройте Legs в Leg Controller. Этот массив будет включать ноги, сейчас просто установим length на 1.
  • Раскройте Element 0 в Legs и сделайте следующее:
    • Найдите главную(hip) кость (верхняя кость ноги) в скелетной иерархии персонажа для данной ноги и перетащите это на переменную Hip. Для Hero это Hero > Reference > Hips > LeftUpLeg (для левой ноги).
    • Найти кость лодыжки (foot bone) и перетащить на переменную Ankle. Для Hero это Hero > Reference > Hips > LeftUpLeg > LeftLeg > LeftFoot (для левой ноги).

      Заметим что Ankle переменная должна действительно прикреплена, чтобы любая кость управляла вращением ноги. Это хорошо для людей, которые имеют лодыжки, но для некоторых животных, у которых лодыжка помещена высоко на ноге, кости, непосредственно управляющие стопой (или лапа или копыто) должны использоваться вместо этого.

    • Если персонаж имеет пальцы ног(toe bone) перетащите на Toe переменную.
    • Установите Foot WidthFoot Length, и Foot Offset (X, Y). Зеленый гизмо должен быть нарисован вокруг ноги, который вы можете использовать, чтобы проверить, что размеры и заполнения(offset) правильны. Снова эти измерения находятся в единицах предшествующих масштабированию.
  • Когда будет всё в порядке с левой ногой, установите length из Legs массива соответственно количеству ног вашего персонажаa (2 для Hero ). Остающиеся ноги теперь скопировали данные с первой ноги, таким образом Вам , вероятно, не придется установить Foot WidthFoot Length, и Foot Offset если другие ноги подобны первой.
    • Вы должны еще установить правильно HipAnkle и Toe преобразования для каждой ноги. Сделайте это тем же способом, которым Вы сделали это для первой ноги.
  • Откройте Source Animations массив в Leg Controller компонент.

Этот Source Animations массив в Leg Controller компоненте включает все анимации для работы с Locomotion System . Он включает:

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

В Quick Start Guide мы сначала проверим Систему Передвижения только с несколькими анимациями, чтобы начать быстро и увидеть, как это выглядит. Тогда мы будем добавлять больше анимаций и смотреть, как это улучшает движения персонажа.

  • Если вы используете Hero в this Quick Start Guide, процесс следующий:
    • Установить length в Source Animations массиве на 1.
      • Открыть Element 0 и переташить анимацию по названием Idle1 в Animation переменную из element.
      • Установить Motion Type в Grounded и написать "locomotion" в Motion Group поле.
    • Установить length в Source Animations массиве на 2.
      • Раскрыть Element 1 и переташить анимацию по названием WalkForward в Animation переменную из element.
      • Установить Motion Type в WalkCycle. При этом Motion Group будет "locomotion" снова.
      • Разрешить(EnableAlso Use Backwards.
  • Добавить Leg Animator скрипт к персонажу (находится Assets > Locomotion System > LegAnimator).
  • Установить Layer персонажа в Player. Это не требуется системой, но Вы должны удостовериться в любом случае что переменная Ground Layers в Leg Animator компоненте, не включает персонаж непосредственно. Это сделано так, чтобы касания(raycasts), используемый Системой Передвижения, не отключил коллайдер( collider) персонажа .
  • Выделить ваш персонаж в Hierarchy view и использовать меню Custom > Locomotion Initialization.
  • Нажать Play. Использовать клавиши для передвижения Hero .

Вы можете теперь сделать окружающую среду немного более интересной, добавляя наклонные поверхности, маленькие и большие предметы и шаги, и т.д. Две вещи важны для определения, какие большие шаги персонаж может иметь:The Step Offset значение в Character Controller и Max Step Height в Leg Animator .

Если Вы хотите позволить персонажу не только идти вперед но также и стрелять всторону или пятиться, Вы можете добавить Aim Look Character Controller скрипт (находится в Assets > Character Controller Scripts > AimLookCharacterController). Отметим снова, что это не часть Системы Передвижения , и Вы можете также управлять направлением ходьбы в своих собственных проектах просто управляя движением и вращением персонажа. Aim Look Character Controller требует, чтобы Вы определили две новые оси, названные Horizontal2 и Vertical2 во входных установках. Использовать меню Edit > Project Settings > Input. Вы можете например позволить старым осям управляться только клавишами курсора, а новыми осями управляться A, D and S, W.

Добавление бега

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

  • В Leg Controller компоненте, откроем Source Animations и раскроем Element 1 с одной анимацией WalkForward . Заметьте что element имеет только одну переменную Native Speed.

Native Speed переменная - скорость, которая соответствует данному циклу прогулки лучше всего.

Native Speed имеет 0.7 для WalkForward анимации Hero . Это означает, что он должен переместиться со скоростью 0.7, чтобы отлично соответствовать анимации .

  • В Normal Character Motor скрипте выставим Max Forward Speed на 0.7, и тоже самое для других скоростей.
  • Нажать Play. Движения сейчас выглядят более реалистично, но они слишком медленные.

Всегда удостоверяйтесь, что анимации, которые вы делаете , соответствуют тому как быстро вы хотите, чтобы персонаж переместился в игре. Система Передвижения определяет родную скорость циклов прогулки и бега, которыми управляет, анализируя, как быстро ноги перемещаются, когда они являются самыми близкими к основанию. В анимациях высокого качества ноги перемещаются с постоянной скоростью, в то время как они, как предполагается, находятся на основании. Это так, потому что для данной прогулки или бега, основание должно перемещаться с постоянной скоростью относительно персонажа.

  • Теперь персонаж двигается быстрее!Увеличьте количество анимаций в Source Animations раскрыв массив Leg Controller и добавьте к нему одну анимацию.
  • Откройте новый элемент и перетащите туда анимацию,которая называется RunForward из выпадающего списка Animation.
    • Настройки,копируются из предыдущего элемента,и все ваши настройки перенесутся на новый элемент.
  • Выберите персонажа в Hierarchy и используйте меню Custom > Locomotion Initialization.
  • Посмотрите на Native Speed в анимации RunForward и установите скорость в компоненте Normal Character Motor.
  • Нажмите кнопку Play.Теперь персонаж может бегать. (Ну это не совсем похоже на анимацию бега,но это по крайней мере, быстрее чем ходьба .)

Обратите внимание, что если у вас персонаж идет в одном направлении а,бег в противоположном направлении,то персонаж будет поварачиваться боком во время поворота,по всему своему радиусу(мелкает экран).Это поисходит потому,что прямо персонаж двигается быстрее,чем назад,в результате чего происходит столкновение анимаций.Хотя Normal Character Motor несет ответственность за такое поведение,на самом деле за это отвечает Locomotion System Locomotion System можно легко повысить реалистичность при ходьбе и беге.В реальной жизни человек не сможет сделать такой оборот и бежать в другом направлении!

При использовании геймпада,такие как Xbox 360 Controller, корость ходьбы/бега может регулироваться с помощью аналогового стика.Если используется только клавиатура,то заставить бежать вашего персонажа можно нажав на кнопку shift. Это является функцией Platform Character Controller основная функция которого,является обработка внешних данных.Стандартная скорость в анимации WalkForward составляет на 25% медленее стандартной скорости бега RunForward, попробуйте установить в Walk Multiplier настройки Platform Character Controller в значение 0.25.

Использование дополнительных анимаций

До этого мы использовали в модели всего три анимации.Чтобы движения выглядели более реалистично при ходьбе,беге вперед и назад,вы можете добавить дополнительные анимации. (Если хотите,то вы можете пропустить этот раздел.)

 

  • В Source Animations откройте массив Leg Controller, отключите функцию Also Use Backwards для анимации WalkForward и RunForward.
  • Установите количество анимаций в Source Animations на 9.
  • Откройте новые элементы(Element) и выберите следущие анимации для компонентов Element 3 - 8 (порядок не имеет значения):
    • WalkBackward
    • RunBackward
    • WalkStrafeLeft
    • RunStrafeLeft
    • WalkStrafeRight
    • RunStrafeRight
  • Выберите вашего персонажа в Hierarchy и используйте меню Custom > Locomotion Initialization.Нажмите Play.

Теперь персонаж ходит и бегает с большим реализмом во всех направлениях.

Система автоматически смешивает все выбранные анимации друг с другом.При отсутствии анимации движения назад,доступны Also Use Backwards и эти настройки должны всегда быть включены для движения вперед,даже если персонаж не должен двигаться назад.В таком случае Unity будет использовать анимацию движения вперед,как анимацию движения назад,смешивая анимации для большей реалистичности.Таким же способом можно использовать анимацию стрельбы из левой руки и преобразовать ее в анимацию стрельбы из правой руки.Отметьте все как выше в Also Use Backwards

Дополнительные возможности

Этот раздел содержит следующие части:

  • Смешивание и скрещивание анимаций
    Эта часть о том, как взаимодействовать с Locomotion System с использованием ваших собственных скриптов.Представлен пример скрипта,описаны команды которые могут быть использованы для контроля персонажем(пример с анимацией прыжка).
  • Опора на окружающие предметы
    Повышение реализма следующим путем:персонаж может опираться на твердые предметы при ходьбе по крутым поверхностям и при ускорении.
  • Адаптация к особенностям поверхности для моделей имеющих больше двух ног
    Сущетсва с более чем двумя ногами,отличающиеся от людей.Locomotion System имеет две простые настройки для обработки такого животного .

Смешивание и скрещивание анимаций

До сих пор Locomotion System контролировало персонажа при ходьбе и беге.В этом разделе мы ближе рассмотрим такие функции,как смесь анимаций и плавный переход между ними.

Locomotion System использует Группы Движения(motion groups). Motion Group является группой анимаций, которыми можно управлять.Motion Group может иметь один или несколько типов анимации Walk Cycle и Grounded.Motion Group не должна содержать две анимации с одинаковой скоростью. Именно поэтому они должны иметь не более одной бездейственной(idle) анимации,а бездейственные анимации всегда имеют скорость раную нулю.

Motion Groups может быть использован для указания группы анимаций с тем же стилем.Затем анимации могут контролироваться с помощью скриптов,в то время как основыне функции анимации будут распределяться атоматически Locomotion System.

В предыдущих разделах мы создали все анимации в Locomotion System в Motion Group с именем "locomotion".Locomotion System организует анимации с теми же названиями Motion Group на остальные группы, поэтому в нашем случае мы имеем одну группу движения,она называется "locomotion". Имя "locomotion" было взято для примера.Вы можете задать другое имя.

В ваших собственных скриптах Locomotion System может смешивать анимации, используя название группы,для примера:

		animation.CrossFade("locomotion",0.5f);

Это будет затухание в Locomotion System длительностью в одну секунду. Она будет также автоматически постепенно затухать, если другие анимация закончились. Точно так же оно работает и с другими анимации. Вы также можете установить непосредственный вес, так же как и для других анимаций:

		animation["locomotion"].weight = 0.8f;
 

Смешивание,затухание анимации,и вес работает точно также и для других анимаций. Однако,Locomotion System не совместима с функциями CrossFadeQueued и PlayQueued. Эти функции могут быть использован для анимации, которые влияют только на верхнюю часть тела,но они не должны быть использованы с анимацией, контролируемой Locomotion System. Также отметим, что отдельные анимации в Motion Group не должны обрабатываться вручную; Locomotion System не будет обрабатывать их.

Анимации, которые не входят в Motion Group бывают двух видов: Те, которые обрабатываются Locomotion System и те которые нет.

  • Чтобы добавить анимацию в Locomotion System ту которая не должна быть в Motion Group,должна быть добавлена в Source Animations открыть массив,но оставитьMotion Group пустой. Теперь Вы можете установить вес,как вы обычно делаете, и ноги будут правильно стоять на земле.
  • Чтобы использовать анимацию, которая не обрабатывается Locomotion System (т.е.которые не в Source Animations), просто используйте его так же как обычно. При использовании таких анимаций, последствием этого является то,что ноги персонажа теряют соприкосновение с землей. Это очень хорошо подходит для анимаций прыжков.

Скрипт JumpAndIdle.cs показывает, затухающую анимацию во время прыжков,а также затухающую анимацию,когда персонаж неактивен .Попробуйте это:

  • Увеличьте количество анимаций в Source Animations открыть массив Leg Controller редактировать компонент.
    • Перетащите анимацию Idle2 в новый Элемент.
    • Поменяйте Motion Type на Grounded и оставьте Motion Group пустым.
  • Добавьте скрипт Jump And Idle к персонажу через Assets > Character Controller Scripts > JumpAndIdle.
    • Перетащите анимацию AimIdle в поле Jumping Animation.
    • Перетащите анимацию Idle1 в поле Idle Animation.
    • Перетащите анимацию Idle2 в поле Waiting Animation.

Hero не имеет нормальной анимации прыжка,так как AimIdle анимация сделана ради демонстрации.

  • Выберите вашего персонажа в Hierarchy и используйте меню Custom > Locomotion Initialization. Нажмите Play.

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

Опора на окружающие предметы

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

Locomotion System не поддерживает использование конкретной анимации для ускорения.Однако,Locomotion System имеет специальные параметры,направленные на ускорение.

  • В Leg Animator параметрами Accelerate Tilt Amount и Accelerate Tilt Sensitivity осуществляется контроль персонажем,основанный на ускорении. Наклон,суммы простых множителей; Значение по умолчанию 0.2,но это не имеет никакого эффекта, если чувствительность равна нулю.Наклон чувствителен к скорости.Высокое значение сделает персонажа максимально чувствительным даже на низких скоростях,а более низкие значения наборот.

В реальном мире, опирание происходит не только при разгоне, но и при ходьбе вверх или вниз по склонам (Только для персонажа с двумя ногами!).Locomotion System работает в двух режимах контроля:склоны и поднятие вверх.

  • В Leg Animator параметры Climb Tilt Amount и Climb Tilt Sensitivity контролируют основываясь на ускорении. Наклон сумма простых множителей; Значение по умолчанию 0.5 но это не имеет никакого эффекта, если чувствительность равна нулю.Наклон при поднятии чувствителен к скорости также как и чувствительность к ускорению,описанная немного выше.

Адаптация к особенностям поверхности для моделей имеющих больше двух ног

Существа с более чем двумя ногами,передвигаются иначе, чем люди и другие двуногие.Обычно существо выравнивает свое тело относительно земли.Locomotion System имеет две простые настройки для таких персонажей. В Leg Animator параметры Ground Hug X и Ground Hug Z выравнивает тело по осям X и Y относительно земли. Для них обоих, значение 0 означает отсутствие согласованности в то время как 1 означает полное согласование. Обычно используются 0 или 1 для каждой оси, но в некоторых случаях могут использоваться большие значения.

  • Люди,птицы, и другие существа с двумя ногами, обычно должны иметь Ground Hug X: 0 и Ground Hug Z: 0. Это значит,что тело не вращается относительно земли.
  • Собаки,кошки,лошади,и другие существа в четырьмя ногами, обычно должны иметь Ground Hug X: 0 и Ground Hug Z: 1. Это означает, что спереди-назад (например, от головы к хвосту)оси вращаются в соответствие с землей, а сбоку оси остаются нетронутыми. (Это предполагает, что существо расположенно по своей главной оси Z.)
  • Пауки,жуки,крабы, и другие существа с большим количеством ног,либо почти плоские,либо почти не имеющие веса,должны использовать Ground Hug X: 1 и Ground Hug Z: 1. Это выравнивает тело полностью относительно земли по обеим осям.

Адаптация к особенностям поверхности работает вместе с описанным опиранием на тяжелые предметы (наклон) в предыдущей части. По своей конструкции, наклон только влияет на оси,которые полностью не касаются земли . для примера,собака с Ground Hug X: 0 и Ground Hug Z: 1 может опереться боком (вдоль главной оси Х) когда бежит,или входит в крутой поворот, но никогда не наклоняется вперед или назад (вдоль главной оси Z ).

 

This document copyright (c) 2008, Rune Skovbo Johansen & Unity Technologies ApS

Доперевел на русский язык LP_Furiors. Исправил ошибки в тексте Поляков Сергей(GoodWin) специально для сайта http://unity3d.vx0.ru

 

Вход на сайт

Онлайн

Сейчас 33 гостей онлайн

Понравился сайт?


Счетчики

Rambler's Top100

Облако тэгов

Joomla Extensions



Карта сайта