使用Vector3.slerp

时间:2013-11-06 19:55:24

标签: c# vector unity3d

我只是想知道我是否正确使用了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是我设置为包含X,Y和amp;的局部变量。我在第一次尝试时创建的第一个Vector3的Z.

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

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

示例Update():

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

我希望这有帮助!