Vector3.Lerp в Unity

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