current | 移动的开始位置。 |
target | 移动的目标位置。 |
maxDistanceDelta | 每次调用移动 current 的距离。 |
Vector3 新位置。
计算 current
指定的点与 target
指定的点之间的位置,移动距离不超过 maxDistanceDelta
指定的距离。
使用 MoveTowards 成员将 current
位置处的对象移向 target
位置。通过使用此函数计算的位置来更新每个帧的对象位置,您可以平滑地将其移向目标。使用 maxDistanceDelta
参数来控制移动的速度。如果 current
位置相比 maxDistanceDelta 更靠近 maxDistanceDelta
,则返回值等于 maxDistanceDelta
;新位置不会过冲 maxDistanceDelta
。要确保对象速度与帧率无关,请将 maxDistanceDelta
值乘以 Time.deltaTime(或者 FixedUpdate 循环中的 Time.fixedDeltaTime)。
请注意,如果将 maxDistanceDelta 设置为负值,则该函数将返回与 target
相反方向的位置。
using UnityEngine;
// 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. var cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder); cylinder.transform.localScale = new Vector3(0.15f, 1.0f, 0.15f);
// Grab cylinder values and place on the target. target = cylinder.transform; 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. var 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.