Unity 6.3
0 онлайн 75 гостей 3 в системе
Вход

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 + (BA) × 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