ゲームの中でしばしば、キャラクターの手あるいは足が特定のところに特定のタイミングで着地することが発生します。例えば、キャラクターが飛び石をジャンプして越えていく必要があるかもしれないし、頭の上の梁をつかむ必要があるかもしれません。
このような状況に対応するには 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 を使用するときは、一般的に、ゲームプレイの正しい瞬間に呼び出さないと役立たないことに気を付けてください。