Vector3.LerpUnclamped
Declaration
public static Vector3 LerpUnclamped(Vector3 a, Vector3 b, float t);Параметры
| Параметр | Описание |
|---|---|
| a | Начальное значение. Это значение возвращается, когда t = 0. |
| b | Конечное значение. Это значение возвращается, когда t = 1. |
| t | Значение, используемое для интерполяции между a и bили за их пределами. |
Возвращаемое значение
Vector3 Интерполированное значение. Это значение всегда лежит на линии, проходящей через точки a и b.
Описание
Интерполирует линейным образом между двумя векторами, позволяя экстраполировать за пределы конечных точек.
Незажатая линейная интерполяция допускает значения t меньше нуля или больше одного, так что возвращенный вектор может лежать вне точек a и b.
Этот метод полезен для нахождения точки некоторой постоянной скоростью вдоль линии через две конечные точки. Например, для постепенного перемещения объекта за пределы и через эти точки.
Возвращаемое значение V равно
V = A + (B − A) × t
Метод интерполирует между точками a и b, так что:
- Когда
t≤ 0, этот метод возвращает вектор, который указывает вдоль линии черезaиb, но передa. - Когда 0 <
t< 1, этот метод возвращает вектор, который указывает вдоль линии междуaиb. Расстояние вдоль линии соответствует доле, представленнойt. - Когда
t> 1, этот метод возвращает вектор, который указывает вдоль линии черезaиb, но заb.
// This example creates three primitive cubes. Using linear interpolation, one cube moves along the line that passes through the others. // Because the interpolation is not clamped to the start and end points, the moving cube passes the end cube after the interpolation frame limit is reached. // Attach this script to any GameObject in your scene.
using UnityEngine;
public class LerpUnclampedExample : MonoBehaviour { // Number of frames in which to completely interpolate between the positions int interpolationFramesCount = 300; int elapsedFrames = 0;
// Number of frames to reset the moving cube to the start position int maxFrameReset = 900;
GameObject CubeStart; GameObject CubeEnd; GameObject CubeMove;
void Start() { // Create the cubes CubeStart = GameObject.CreatePrimitive(PrimitiveType.Cube); CubeStart.transform.position = new Vector3(-5,0,0);
CubeEnd = GameObject.CreatePrimitive(PrimitiveType.Cube); CubeEnd.transform.position = new Vector3(5,0,0);
CubeMove = GameObject.CreatePrimitive(PrimitiveType.Cube); CubeMove.transform.position = CubeStart.transform.position; }
void Update() { float interpolationRatio = (float)elapsedFrames / interpolationFramesCount;
// Interpolate position of the moving cube, based on the ratio of elapsed frames CubeMove.transform.position = Vector3.LerpUnclamped(CubeStart.transform.position, CubeEnd.transform.position, interpolationRatio); // Reset elapsedFrames to zero after it reaches maxFrameReset elapsedFrames = (elapsedFrames + 1) % (maxFrameReset);
} }
Дополнительные ресурсы: Lerp SlerpUnclampes