matchPosition | ボディパーツが到達してほしい位置 |
matchRotation | ボディパーツが到達してほしい回転位置(Rotation) |
targetBodyPart | マッチングに関連するボディパーツ |
weightMask | 位置や回転のマッチングに使用するウェイトの構造( Structure ) |
startNormalizedTime | アニメーションクリップの開始時間( 0 - クリップの開始位置、1 - クリップの終了位置) |
targetNormalizedTime | アニメーションクリップの終了時間( 0 - クリップの開始位置、1 - クリップの終了位置)、1 より大きい値により特定のループ回数の後、マッチングをトリガーさせることができます。例: 2.3 は 2 回目のループの 30%を示します。 |
ゲームオブジェクト位置および回転を自動的に調整して、現在のステータスが指定された状態となったときに AvatarTarget が matchPosition に到達するようにします。
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); } }