Соответствие целей
Часто в играх возникает ситуация, когда персонаж должен двигаться таким образом, чтобы рука или нога приземлились в определенном месте в определенное время. Например, персонажу может понадобиться перепрыгнуть через ступеньки или прыгнуть и схватить балку над головой.
Вы можете использовать функцию 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<Animator>();
}
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 будет иметь смысл только в том случае, если он будет вызван в правильный момент игры.