matchPosition | @param matchPosition Позиция, к которой нам необходимо, чтобы стремилась часть тела. |
matchRotation | @param matchRotation Поворот, в котором нам необходимо, чтобы была часть тела. |
targetBodyPart | @param targetBodyPart Часть тела, которая участвует в сопоставлении. |
weightMask | @param weightMask Структура, которая содержит веса для сопоставления позиции и поворота. |
startNormalizedTime | @param startNormalizedTime Время начала в пределах анимационного ролика (0 - начало ролика, 1 - конец ролика). |
targetNormalizedTime | End time within the animation clip (0 - beginning of clip, 1 - end of clip), values greater than 1 can be set to trigger a match after a certain number of loops. Ex: 2.3 means at 30% of 2nd loop. |
Automatically adjust the GameObject
position and rotation.
Adjust the GameObject
position and rotation so that the AvatarTarget reaches the matchPosition when the current state is at the specified progress. Target matching only works on the base layer (index 0).
You can only queue one match target at a time and you must wait for the first one to finish, otherwise your target matching will be discarded.
If you call a MatchTarget with a start time lower than the clip's current normalize time and the clip can loop, MatchTarget will adjust the time to match the next clip loop. ex: start time= 0.2 current normalize time = 0.3, start time will be 1.2.
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); } }