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);
}
}
