Animator.MatchTarget
Declaration
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% второго цикла. |
| 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); } }