Version: 6000.3
语言: 中文
状态机独奏和静音
动画师覆盖控制器(Animator Override Controller)

目标匹配

在游戏中,经常会出现这样的情况:角色必须以这样的方式移动,即手或脚在特定时间落在某个位置。例如,角色可能需要跳过垫脚石或跳跃并抓住头顶横梁。

可以使用 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 的结果通常只有在游戏中的正确点调用时才有意义。

状态机独奏和静音
动画师覆盖控制器(Animator Override Controller)