# MoveTowards

> Moves a point current towards target.

## Definition

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

## MoveTowards(Vector2, Vector2, float)

Moves a point `current` towards `target`.

```csharp
public static Vector2 MoveTowards(Vector2 current, Vector2 target, float maxDistanceDelta)
```

### Parameters

**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): A point to move.**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): The target point to move to.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): A target distance not to exceed.

### Returns

| Type                                                              | Description                                                                            |
| ----------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| [Vector2](/engine/6000.6/script-reference/unityengine/vector2.md) | The new position, moved from `current` towards `target` by at most `maxDistanceDelta`. |

### Remarks

This is essentially the same as [Vector2.Lerp](/engine/6000.6/script-reference/unityengine/vector2/lerp.md) but instead the function will ensure that the distance never exceeds `maxDistanceDelta`. Negative values of `maxDistanceDelta` pushes the vector away from `target`.

### Examples

```csharp
using UnityEngine;

// 2D MoveTowards example
// Move the sprite to where the mouse is clicked
//
// Set speed to -1.0f and the sprite will move
// away from the mouse click position forever

public class ExampleClass : MonoBehaviour
{
    private float speed = 10.0f;
    private Vector2 target;
    private Vector2 position;
    private Camera cam;

    void Start()
    {
        target = new Vector2(0.0f, 0.0f);
        position = gameObject.transform.position;

        cam = Camera.main;
    }

    void Update()
    {
        float step = speed * Time.deltaTime;

        // move sprite towards the target location
        transform.position = Vector2.MoveTowards(transform.position, target, step);
    }

    void OnGUI()
    {
        Event currentEvent = Event.current;
        Vector2 mousePos = new Vector2();
        Vector2 point = new Vector2();

        // compute where the mouse is in world space
        mousePos.x = currentEvent.mousePosition.x;
        mousePos.y = cam.pixelHeight - currentEvent.mousePosition.y;
        point = cam.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, 0.0f));

        if (Input.GetMouseButtonDown(0))
        {
            // set the target to the mouse click location
            target = point;
        }
    }
}
```

## MoveTowards(Vector2, Vector2, float)

Moves a point `current` towards `target`.

```csharp
public static Vector2 MoveTowards(in Vector2 current, in Vector2 target, float maxDistanceDelta)
```

### Parameters

**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): A point to move.**** (\[Vector2]\(/engine/6000.6/script-reference/unityengine/vector2)): The target point to move to.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): A target distance not to exceed.

### Returns

| Type                                                              | Description                                                                            |
| ----------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| [Vector2](/engine/6000.6/script-reference/unityengine/vector2.md) | The new position, moved from `current` towards `target` by at most `maxDistanceDelta`. |

### Remarks

This is essentially the same as [Vector2.Lerp](/engine/6000.6/script-reference/unityengine/vector2/lerp.md) but instead the function will ensure that the distance never exceeds `maxDistanceDelta`. Negative values of `maxDistanceDelta` pushes the vector away from `target`.

### Examples

```csharp
using UnityEngine;

// 2D MoveTowards example
// Move the sprite to where the mouse is clicked
//
// Set speed to -1.0f and the sprite will move
// away from the mouse click position forever

public class ExampleClass : MonoBehaviour
{
    private float speed = 10.0f;
    private Vector2 target;
    private Vector2 position;
    private Camera cam;

    void Start()
    {
        target = new Vector2(0.0f, 0.0f);
        position = gameObject.transform.position;

        cam = Camera.main;
    }

    void Update()
    {
        float step = speed * Time.deltaTime;

        // move sprite towards the target location
        transform.position = Vector2.MoveTowards(transform.position, target, step);
    }

    void OnGUI()
    {
        Event currentEvent = Event.current;
        Vector2 mousePos = new Vector2();
        Vector2 point = new Vector2();

        // compute where the mouse is in world space
        mousePos.x = currentEvent.mousePosition.x;
        mousePos.y = cam.pixelHeight - currentEvent.mousePosition.y;
        point = cam.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, 0.0f));

        if (Input.GetMouseButtonDown(0))
        {
            // set the target to the mouse click location
            target = point;
        }
    }
}
```
