게임에서는 캐릭터가 특정 시간에 특정 위치에 손이나 발이 착지하도록 이동해야 하는 경우가 많습니다. 예를 들어, 캐릭터가 징검다리를 건너거나 점프하여 머리 위 기둥을 잡아야 할 수 있습니다.
이러한 종류의 상황을 처리하기 위해 Animator.MatchTarget 함수를 사용할 수 있습니다. 예를 들어 캐릭터가 플랫폼으로 점프하는 상황을 연출하고 싶은데 이미 _점프 업_이라는 애니메이션 클립이 있다고 가정해 보겠습니다. 우선, 캐릭터가 지면에서 뜨기 시작하는 애니메이션 클립의 위치를 찾아야 합니다. 여기서는 정규화된 시간에 애니메이션 클립의 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을 사용하는 경우 일반적으로 게임플레이의 올바른 시점에 호출된 경우에만 결과가 제대로 나옵니다.