Unity 6.3
0 онлайн 97 гостей 3 в системе
Вход
Animation Шаг 55 из 74

Соответствие целей

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

Вы можете использовать функцию Animator.MatchTarget, чтобы справиться с подобной ситуацией. Представьте, например, что вы хотите создать ситуацию, в которой персонаж прыгает на платформу, и у вас уже есть анимационный клип для этого, названный Jump Up. Сначала вам нужно найти место в анимационном клипе, в котором персонаж начинает подниматься с земли. В этом случае это 14.1% или 0.141 в клипе анимации в нормализованном времени:

Персонаж на 0.141 в клипе анимации.
Персонаж на 0.141 в клипе анимации.

Вам также нужно найти место в клипе анимации, где персонаж собирается приземлиться на ноги, которое в данном случае находится на 78.0% или 0.78.

Персонаж на 0.78 в клипе анимации.
Персонаж на 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 будет иметь смысл только в том случае, если он будет вызван в правильный момент игры.