Unity3D技术之 Mecanim 高级主题目标匹配浅析
目标匹配概述
在游戏开发中,经常会遇到这样的场景:角色需要在特定时间以手或脚停留在某个位置的方式进行移动。例如,角色跳过踏脚石或者跳起抓住头顶的横梁。针对这种情况,Unity的Animator.MatchTarget功能可以很好地处理。
具体实现步骤
下面以角色跳到平台上为例,详细介绍如何使用Animator.MatchTarget功能。假设已经制作了名为“跳起来 (Jump Up)”的动画片段,具体步骤如下:
1. 确定动画关键位置
- 角色开始离开地面的位置:在动画片段中找到角色开始离开地面的位置。在本例中,按标准化时间计算,该位置值是14.1%,即0.141。
- 角色双脚将要落地的位置:同样在动画片段中找到角色双脚将要落地的位置。在本例中,此位置值为78.0%,即0.78。
2. 创建脚本
创建一个名为TargetCtrl.cs的脚本,用于调用MatchTarget方法。以下是脚本的详细代码:
using UnityEngine;
using System;
[RequireComponent(typeof(Animator))]
public class TargetCtrl : MonoBehaviour {
// 存储Animator组件
protected Animator animator;
// 场景中的平台对象
public Transform jumpTarget = null;
void Start () {
// 获取Animator组件
animator = GetComponent<Animator>();
}
void Update () {
if(animator) {
// 当按下Fire1按钮时调用MatchTarget方法
if(Input.GetButton("Fire1"))
animator.MatchTarget(jumpTarget.position, jumpTarget.rotation, AvatarTarget.LeftFoot,
new MatchTargetWeightMask(Vector3.one, 1f), 0.141f, 0.78f);
}
}
}
3. 附加脚本
将上述脚本附加到Mecanim模型上。脚本运行后,角色会从当前位置跳起,然后用左脚落在目标位置。
注意事项
需要注意的是,使用MatchTarget的结果通常只有在游戏中的正确时机调用时才有意义。开发者需要根据具体的游戏场景和需求,合理安排MatchTarget方法的调用时机,以达到最佳的动画效果。