版本: Unity 6 (6000.0)
语言英语
  • C#

Animator.MatchTarget

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

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