# MatchTarget

> Automatically adjust the GameObject position and rotation.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.0/script-reference/unityengine.md)
* **Assembly:** UnityEngine.AnimationModule

## MatchTarget(Vector3, Quaternion, AvatarTarget, MatchTargetWeightMask, float)

Automatically adjust the GameObject position and rotation.

```csharp
public void MatchTarget(Vector3 matchPosition, Quaternion matchRotation, AvatarTarget targetBodyPart, MatchTargetWeightMask weightMask, float startNormalizedTime)
```

### Parameters

**** (\[Vector3]\(/engine/6000.0/script-reference/unityengine/vector3)): The position we want the body part to reach.**** (\[Quaternion]\(/engine/6000.0/script-reference/unityengine/quaternion)): The rotation in which we want the body part to be.**** (\[AvatarTarget]\(/engine/6000.0/script-reference/unityengine/avatartarget)): The body part that is involved in the match.**** (\[MatchTargetWeightMask]\(/engine/6000.0/script-reference/unityengine/matchtargetweightmask)): Structure that contains weights for matching position and rotation.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): Start time within the animation clip (0 - beginning of clip, 1 - end of clip).

### Remarks

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 [Animator.MatchTarget](/engine/6000.0/script-reference/unityengine/animator/matchtarget.md) with a start time lower than the clip's normalized time and the clip can loop, [Animator.MatchTarget](/engine/6000.0/script-reference/unityengine/animator/matchtarget.md) will adjust the time to match the next clip loop. For example, start time= 0.2 normalized time = 0.3, start time will be 1.2.  [Animator.applyRootMotion](/engine/6000.0/script-reference/unityengine/animator/applyrootmotion.md) must be enabled for MatchTarget to take effect.

### Examples

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

## MatchTarget(Vector3, Quaternion, AvatarTarget, MatchTargetWeightMask, float, float)

Automatically adjust the GameObject position and rotation.

```csharp
public void MatchTarget(Vector3 matchPosition, Quaternion matchRotation, AvatarTarget targetBodyPart, MatchTargetWeightMask weightMask, float startNormalizedTime, float targetNormalizedTime)
```

### Parameters

**** (\[Vector3]\(/engine/6000.0/script-reference/unityengine/vector3)): The position we want the body part to reach.**** (\[Quaternion]\(/engine/6000.0/script-reference/unityengine/quaternion)): The rotation in which we want the body part to be.**** (\[AvatarTarget]\(/engine/6000.0/script-reference/unityengine/avatartarget)): The body part that is involved in the match.**** (\[MatchTargetWeightMask]\(/engine/6000.0/script-reference/unityengine/matchtargetweightmask)): Structure that contains weights for matching position and rotation.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): Start time within the animation clip (0 - beginning of clip, 1 - end of clip).**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): 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.

### Remarks

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 [Animator.MatchTarget](/engine/6000.0/script-reference/unityengine/animator/matchtarget.md) with a start time lower than the clip's normalized time and the clip can loop, [Animator.MatchTarget](/engine/6000.0/script-reference/unityengine/animator/matchtarget.md) will adjust the time to match the next clip loop. For example, start time= 0.2 normalized time = 0.3, start time will be 1.2.  [Animator.applyRootMotion](/engine/6000.0/script-reference/unityengine/animator/applyrootmotion.md) must be enabled for MatchTarget to take effect.

### Examples

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

## MatchTarget(Vector3, Quaternion, AvatarTarget, MatchTargetWeightMask, float, float, bool)

Automatically adjust the GameObject position and rotation.

```csharp
public void MatchTarget(Vector3 matchPosition, Quaternion matchRotation, AvatarTarget targetBodyPart, MatchTargetWeightMask weightMask, float startNormalizedTime, float targetNormalizedTime, bool completeMatch)
```

### Parameters

**** (\[Vector3]\(/engine/6000.0/script-reference/unityengine/vector3)): The position we want the body part to reach.**** (\[Quaternion]\(/engine/6000.0/script-reference/unityengine/quaternion)): The rotation in which we want the body part to be.**** (\[AvatarTarget]\(/engine/6000.0/script-reference/unityengine/avatartarget)): The body part that is involved in the match.**** (\[MatchTargetWeightMask]\(/engine/6000.0/script-reference/unityengine/matchtargetweightmask)): Structure that contains weights for matching position and rotation.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): Start time within the animation clip (0 - beginning of clip, 1 - end of clip).**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): 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.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): Allows you to specify what should happen if the MatchTarget function is interrupted. A value of true causes the GameObject to immediately move to the matchPosition if interrupted. A value of false causes the GameObject to stay at its current position if interrupted.

### Remarks

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 [Animator.MatchTarget](/engine/6000.0/script-reference/unityengine/animator/matchtarget.md) with a start time lower than the clip's normalized time and the clip can loop, [Animator.MatchTarget](/engine/6000.0/script-reference/unityengine/animator/matchtarget.md) will adjust the time to match the next clip loop. For example, start time= 0.2 normalized time = 0.3, start time will be 1.2.  [Animator.applyRootMotion](/engine/6000.0/script-reference/unityengine/animator/applyrootmotion.md) must be enabled for MatchTarget to take effect.

### Examples

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