Описание
Сферическая интерполяция между двумя векторами.
Интерполирует между a
и b
на величину t
. Разница между этим и линейной интерполяцией (также известной как «lerp») заключается в том, что векторы рассматриваются как направления, а не как точки в пространстве. Направление возвращаемого вектора интерполируется по углу, а его величина интерполируется между величинами from
и to
.
Параметр t
ограничен диапазоном [0, 1].
// Анимирует положение в дуге между восходом и закатом.
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public Transform sunrise;
public Transform sunset;
// Time to move from sunrise to sunset position, in seconds.
public float journeyTime = 1.0f;
// The time at which the animation started.
private float startTime;
void Start()
{
// Note the time at the start of the animation.
startTime = Time.time;
}
void Update()
{
// The center of the arc
Vector3 center = (sunrise.position + sunset.position) * 0.5F;
// move the center a bit downwards to make the arc vertical
center -= new Vector3(0, 1, 0);
// Interpolate over the arc relative to center
Vector3 riseRelCenter = sunrise.position - center;
Vector3 setRelCenter = sunset.position - center;
// The fraction of the animation that has happened so far is
// equal to the elapsed time divided by the desired time for
// the total journey.
float fracComplete = (Time.time - startTime) / journeyTime;
transform.position = Vector3.Slerp(riseRelCenter, setRelCenter, fracComplete);
transform.position += center;
}
}
Смотрите так же: Lerp, SlerpUnclamped.