Объявление
public static Vector2 MoveTowards(Vector2 current, Vector2 target, float maxDistanceDelta);Описание
Перемещает точку current
в сторону target
.
По сути, это то же самое, что и Vector2.Lerp, но вместо этого функция гарантирует, что расстояние никогда не превысит maxDistanceDelta
.
Отрицательные значения maxDistanceDelta
отодвигают вектор от target
.
using UnityEngine;
// Пример 2D MoveTowards
// Переместить спрайт туда, где щелкнули мышью
//
// Установите скорость на -1.0f и спрайт будет двигаться
// навсегда от места щелчка мыши
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;
// перемещаем спрайт в указанное место
transform.position = Vector2.MoveTowards(transform.position, target, step);
}
void OnGUI()
{
Event currentEvent = Event.current;
Vector2 mousePos = new Vector2();
Vector2 point = new Vector2();
// вычислить, где находится мышь в мировом пространстве
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))
{
// установить цель в место щелчка мыши
target = point;
}
}
}