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); } }