球状に 2 つのベクトル間を補間します
t
で a
と b
の間を補間します。この関数と、直線で補間する
(別名 "leap")の違いは、ベクトルは方向としてではなく、空間の位置として扱われることです。
返されたベクトルの方向は角度によって補間され
magnitude は from
と to
の大きさの間で補間されます。
値は [0...1] の範囲に制限されます。
// Animates the position in an arc between sunrise and sunset. var sunrise : Transform; var sunset : Transform; // Time to move from sunrise to sunset position, in seconds. var journeyTime = 1.0; // The time at which the animation started. private var startTime: float; function Start() { // Note the time at the start of the animation. startTime = Time.time; } function Update () { // The center of the arc var center = (sunrise.position + sunset.position) * 0.5; // move the center a bit downwards to make the arc vertical center -= Vector3(0,1,0); // Interpolate over the arc relative to center var riseRelCenter = sunrise.position - center; var 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. var fracComplete = (Time.time - startTime) / journeyTime; transform.position = Vector3.Slerp(riseRelCenter, setRelCenter, fracComplete); transform.position += center; }
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { public Transform sunrise; public Transform sunset; public float journeyTime = 1.0F; private float startTime; void Start() { startTime = Time.time; } void Update() { Vector3 center = (sunrise.position + sunset.position) * 0.5F; center -= new Vector3(0, 1, 0); Vector3 riseRelCenter = sunrise.position - center; Vector3 setRelCenter = sunset.position - center; float fracComplete = (Time.time - startTime) / journeyTime; transform.position = Vector3.Slerp(riseRelCenter, setRelCenter, fracComplete); transform.position += center; } }
See Also: Lerp, SlerpUnclamped.