Vector3.Lerp — Функция Lerp и блок «Промежуток пути»
Декларация
общедоступный статический Vector3 Lerp ( Vector3 a , Vector3 b , float t );
Параметры
a | Начальная точка | Начальное значение, возвращаемое при t = 0. |
b | Конечная точка | Конечное значение, возвращаемое при t = 1. |
t | Параметр (Промежуток времени) | Значение, используемое для интерполяции между a и b. |
Возврат
Vector3 Интерполированное значение, равно a + (b — a) * t.
Описание
Линейная интерполяция между двумя точками.
Интерполирует между точками a
и b
интерполянтом t
. Параметр t
ограничен диапазоном [0, 1]. Это чаще всего используется для поиска точки на некоторой части пути вдоль линии между двумя конечными точками (например, для постепенного перемещения объекта между этими точками).
Возвращаемое значение равно a + (b — a) * t (что также может быть записано как a * (1-t) + b * t ).
Когда t
= 0, Vector3.Lerp (a, b, t) возвращается a
.
Когда t
= 1, Vector3.Lerp (a, b, t) возвращается b
.
Когда t
= 0,5, Vector3.Lerp (a, b, t) возвращает точку , находящуюся посередине между a
и b
.
Если сложно понять:
Если у Вас возникли проблемы с созданием скрипта C# для игры на Unity, то можете попробовать приложение CS Maker 2 (Кодиус). С его помощью можно создавать скрипт, даже не зная самого языка программирования!
// Краткий пример использования Vector3.Lerp . // Добавьте его к объекту в вашей сцене, и во время воспроизведения он будет рисовать в Scene View небольшую желтую линию между началом координат сцены и позицией, интерполированной между двумя другими позициями (одна на оси вверх, другая на передней ось). using UnityEngine; открытый класс ExampleClass: MonoBehaviour { общедоступный int interpolationFramesCount = 45; // Количество кадров для полной интерполяции между двумя позициями int elapsedFrames = 0; void Update () { float interpolationRatio = (float) elapsedFrames / interpolationFramesCount; Vector3 interpolatedPosition = Vector3.Lerp ( Vector3.up , Vector3.forward , interpolationRatio); elapsedFrames = (elapsedFrames + 1)% (interpolationFramesCount + 1); // сбрасываем elapsedFrames в ноль после достижения (interpolationFramesCount + 1) Debug.DrawLine ( Vector3.zero , Vector3.up , Color.green ); Debug.DrawLine ( Vector3.zero , Vector3.forward , Color.blue ); Debug.DrawLine (Vector3.zero , interpolatedPosition, Color.yellow ); } }
// Более длинный пример использования Vector3.Lerp . // Поместите этот скрипт под объект в вашей сцене и укажите 2 других объекта в переменных "startMarker" / "endMarker" в окне инспектора скриптов. // Во время воспроизведения сценарий будет перемещать объект по пути между положением этих двух маркеров. using UnityEngine; using System.Collections; открытый класс ExampleClass: MonoBehaviour { // Преобразуется, чтобы действовать как маркеры начала и конца путешествия. общедоступный Transform startMarker; общедоступный Transform endMarker; // Скорость движения в единицах в секунду. скорость публичного поплавка = 1.0F; // Время начала движения. private float startTime; // Общее расстояние между маркерами. частное плавание путешествиеLength; void Start () { // Запомните время начала движения. startTime = Время. время ; // Рассчитываем длину пути. JourneyLength = Vector3.Distance (startMarker.position, endMarker.position); } // Перемещение в конечную конечную позицию. void Update () { // Пройденное расстояние равно затраченному времени, умноженному на скорость .. float distCovered = ( Time.time - startTime) * скорость; // Доля пройденного пути равна текущему расстоянию, разделенному на общее расстояние. float FractionOfJourney = distCovered / JourneyLength; // Устанавливаем нашу позицию как часть расстояния между маркерами. transform.position = Vector3.Lerp (startMarker.position, endMarker.position, FractionOfJourney); } }