0

我只想知道我是否正确使用了vector3.slerp,因为我有一些问题。

我在场景中设置了一个立方体,我希望它从当前位置平滑地移动到程序传入的位置。在我尝试使用 slerp 之前,我只是让我的立方体从当前点移动到新点,如下所示(正如我所说,数学一切正常):

cubeFour.transform.localPosition = new Vector3((B2*C1 - B1*C2)/delta,0,(A1*C2 - A2*C1)/delta);  

但是当我把它放在一个 slerp 调用中时,我的立方体不再出现在屏幕上。这就是我所说的:

Vector3 targetPosition = new Vector3(lerpX, lerpY, lerpZ);

cubeFour.transform.localPosition = Vector3.Slerp(cubeFour.transform.localPosition, targetPosition, Time.deltaTime);

LerpX、LerpY 和 LerpZ 是我设置的局部变量,用于包含我在第一次尝试中创建的第一个 Vector3 的 X、Y 和 Z。

我是否正确设置了 slerp 或者我在某处做了一个 kerfuffle?

4

2 回答 2

2

Slerp最适合方向,Lerp最适合位置。您可能应该使用Lerp. 并且Time.deltaTime几乎可以肯定是错误的选择t。您应该给它一个在您希望立方体移动的时间内从 0 移动到 1 的数字,例如

float moveTimeInSeconds = 2;
cubeFour.transform.localPosition = Vector3.Lerp(cubeStartingPosition, targetPosition, (Time.time - startTime) / moveTimeInSeconds);

或者MoveTowards,如果定义运动速度更有意义,并且无论起点如何都朝着目标移动,而不是通过起点和终点位置和时间,则使用它。

float step = speed * Time.deltaTime;
cubeFour.transform.localPosition = Vector3.MoveTowards(cubeFour.transform.localPosition, targetPosition, step);
于 2013-11-06T20:16:12.007 回答
0

Lerp 使用百分比来制作动画!

这意味着您必须插入一个百分比,而不是每帧接近相同的值。

示例更新():

var animationSpeedInSeconds=1;
var animationCounter:float=0;
function Update(){
    if(animationCounter>=0 && animationCounter<=1){
        animationCounter+=Time.deltaTime/animationSpeedInSeconds;
        cubeFour.transform.localPosition = Vector3.MoveTowards(cubeFour.transform.localPosition, targetPosition, animationCounter);
    }
}

我希望这有帮助!

于 2013-11-09T16:18:19.510 回答