current | The position to move from. |
target | The position to move towards. |
maxDistanceDelta | Distance to move current per call. |
Vector3 The new position.
Calculate a position between the points specified by current
and target
, moving no farther than the distance specified by maxDistanceDelta
.
Use the MoveTowards member to move an object at the current
position toward the target
position. By updating an object’s position each frame using the position calculated by this function, you can move it towards the target smoothly. Control the speed of movement with the maxDistanceDelta
parameter. If the current
position is already closer to the target
than maxDistanceDelta, the value returned is equal to target
; the new position does not overshoot target
. To make sure that object speed is independent of frame rate, multiply the maxDistanceDelta
value by Time.deltaTime (or Time.fixedDeltaTime in a FixedUpdate loop).
Note that if you set maxDistanceDelta to a negative value, this function returns a position in the opposite direction from the target
.
using UnityEngine; using System.Collections;
// Vector3.MoveTowards example.
// A cube can be moved around the world. It is kept inside a 1 unit by 1 unit // xz space. A small, long cylinder is created and positioned away from the center of // the 1x1 unit. The cylinder is moved between two locations. Each time the cylinder is // positioned the cube moves towards it. When the cube reaches the cylinder the cylinder // is re-positioned to the other location. The cube then changes direction and moves // towards the cylinder again. // // A floor object is created for you. // // To view this example, create a new 3d Project and create a Cube placed at // the origin. Create Example.cs and change the script code to that shown below. // Save the script and add to the Cube. // // Now run the example.
public class Example : MonoBehaviour { // Adjust the speed for the application. public float speed = 1.0f;
// The target (cylinder) position. private Transform target;
void Awake() { // Position the cube at the origin. transform.position = new Vector3(0.0f, 0.0f, 0.0f);
// Create and position the cylinder. Reduce the size. GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder); Camera.main.transform.position = new Vector3(0.85f, 1.0f, -3.0f);
// Grab cylinder values and place on the target. target = cylinder.transform; target.transform.localScale = new Vector3(0.15f, 1.0f, 0.15f); target.transform.position = new Vector3(0.8f, 0.0f, 0.8f);
// Position the camera. Camera.main.transform.position = new Vector3(0.85f, 1.0f, -3.0f); Camera.main.transform.localEulerAngles = new Vector3(15.0f, -20.0f, -0.5f);
// Create and position the floor. GameObject floor = GameObject.CreatePrimitive(PrimitiveType.Plane); floor.transform.position = new Vector3(0.0f, -1.0f, 0.0f); }
void Update() { // Move our position a step closer to the target. float step = speed * Time.deltaTime; // calculate distance to move transform.position = Vector3.MoveTowards(transform.position, target.position, step);
// Check if the position of the cube and sphere are approximately equal. if (Vector3.Distance(transform.position, target.position) < 0.001f) { // Swap the position of the cylinder. target.position *= -1.0f; } } }
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.