ゲームの中でしばしば、キャラクターの手や足が決まった場所に特定のタイミングで着地することが発生します。例えば、キャラクターが飛び石をジャンプして越えていく必要があるかもしれないし、頭の上にある柱をつかむ必要があるかもしれません。
このような状況に対応するには 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;
//シーンの台のオブジェクト
public Transform jumpTarget = null;
void Start () {
animator = GetComponent();
}
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 を使用するときは、一般的に、ゲームプレイの正しい瞬間に呼び出さないと役立たないことに気を付けてください。