Часто в играх возникает ситуация, когда персонаж должен двигаться таким образом, чтобы рука или нога приземлились в определенном месте в определенное время. Например, персонажу может понадобиться перепрыгнуть через ступеньки или схватиться за перекладину над головой.
Вы можете использовать функцию Animator.MatchTarget, чтобы справиться с такой ситуацией. Представьте, например, что вы хотите устроить ситуацию, когда персонаж прыгает на платформу, и у вас уже есть анимационный клипданные анимации которые можно использовать для анимированных персонажей или простых анимаций. Это простое «единичное» движение, такое как (один конкретный пример) «Простояние», «Ходьба» или «Бег». Подробнее
См. в Словарь, где он называется Jump Up. Во-первых, вам нужно найти место в анимационном ролике, в котором персонаж начинает отрываться от земли, обратите внимание, в данном случае это 14,1% или 0,141 в анимационном клипе в нормализованном времени:-
Вам также необходимо найти место в анимационном клипе, где персонаж вот-вот приземлится на ноги, что в данном случае составляет 78,0% или 0,78.
С помощью этой информации вы можете создать скрипт, вызывающий MatchTarget, который можно прикрепить к модели:-
using UnityEngine;
using System;
[RequireComponent(typeof(Animator))]
public class TargetCtrl : MonoBehaviour {
protected Animator animator;
//the platform object in the scene
public Transform jumpTarget = null;
void Start () {
animator = GetComponent();
}
void Update () {
if(animator) {
if(Input.GetButton("Fire1"))
animator.MatchTarget(jumpTarget.position, jumpTarget.rotation, AvatarTarget.LeftFoot,
new MatchTargetWeightMask(Vector3.one, 1f), 0.141f, 0.78f);
}
}
}
Сценарий будет перемещать персонажа так, чтобы он прыгал с текущей позиции и приземлялся левой ногой на цель. Имейте в виду, что результат использования MatchTarget, как правило, имеет смысл только в том случае, если он вызывается в нужный момент игрового процесса.