Объявление
public void MatchTarget(Vector3 matchPosition, Quaternion matchRotation, AvatarTarget targetBodyPart, MatchTargetWeightMask weightMask, float startNormalizedTime, float targetNormalizedTime = 1);Параметры
matchPosition | Положение, которое мы хотим, чтобы часть тела достигла. |
matchRotation | Вращение, в котором мы хотим, чтобы часть тела была. |
targetBodyPart | Часть тела, которая участвует в матче. |
weightMask | Структура, содержащая веса для сопоставления положения и поворота. |
startNormalizedTime | Время начала в анимационном клипе (0 - начало клипа, 1 - конец клипа). |
targetNormalizedTime | Время окончания в анимационном клипе (0 — начало клипа, 1 — конец клипа), значения больше 1 могут быть установлены для запуска совпадения после определенного количества циклов. Пример: 2,3 означает 30% 2-го цикла. |
completeMatch | Позволяет указать, что должно произойти, если функция MatchTarget будет прервана. Значение true заставляет GameObject немедленно перемещаться в matchPosition, если его прерывают. Значение false заставляет GameObject оставаться в своей текущей позиции, если его прерывают. |
Описание
Автоматическая настройка положения и поворота GameObject
.
Настройте положение и поворот GameObject
таким образом, чтобы AvatarTarget достигнул matchPosition, когда текущее состояние соответствует указанному прогрессу. Соответствие цели работает только на базовом слое (индекс 0).
Вы можете поставить в очередь только одну цель соответствия за раз, и вы должны дождаться завершения первой, иначе ваше соответствие цели будет отклонено.
Если вы вызываете MatchTarget со временем начала меньше, чем нормализованное время клипа, и клип может зацикливаться, MatchTarget отрегулирует время, чтобы оно соответствовало следующему циклу клипа. Например, время начала = 0,2, нормализованное время = 0,3, время начала будет 1,2. Animator.applyRootMotion должен быть включен, чтобы MatchTarget вступил в силу.
using UnityEngine;
public class TargetMatchingManager : MonoBehaviour
{
public void MatchTarget(Vector3 matchPosition, Quaternion matchRotation, AvatarTarget target, MatchTargetWeightMask weightMask, float normalisedStartTime, float normalisedEndTime)
{
var animator = GetComponent<Animator>();
if (animator.isMatchingTarget)
return;
float normalizeTime = Mathf.Repeat(animator.GetCurrentAnimatorStateInfo(0).normalizedTime, 1f);
if (normalizeTime > normalisedEndTime)
return;
animator.MatchTarget(matchPosition, matchRotation, target, weightMask, normalisedStartTime, normalisedEndTime);
}
}