Unity在自由落体时旋转播放器不工作

时间:2018-04-26 04:47:05

标签: unity3d rotation quaternions raycasting lerp

我有一个从斜坡发射的玩家。一切正常,直到那一点。

当玩家离开坡道时他们看起来有点向上,所以我想要做的是平稳地改变玩家(X,Y,Z)的旋转;从现在的一个到新的。

我总是需要y = -180

我总是需要z = 0

我需要x =(MinAngle,MaxAngle) - >也许这些值(-30,30)

  

X的原因(MinAngle,MaxAngle)

我想弄清楚如何平滑地旋转某个轴上的玩家并停在某个角度,这样就可以在这里应用,也可以用玩家按钮(向上/向下)

  

transform.rotation Line导致问题

rotCur = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;

transform.rotation = Quaternion.Lerp(Quaternion.Euler(30,-180,0), rotCur, Time.deltaTime * 5);

1 个答案:

答案 0 :(得分:0)

你的问题究竟是什么?你只是说它不起作用" - 但究竟发生了什么?

你尝试过这个:

transform.rotation = Quaternion.Lerp(rotCur, Quaternion.Euler(30,-180,0), Time.deltaTime * 5);

交换第一个和第二个参数

我认为rotCur意味着"当前轮换"在Quaternion.Lerp中,第一个参数是"来自",第二个参数是"到"

编辑:你试过这个:

transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(30,-180,0), Time.deltaTime * 5);

编辑2:我知道你的问题是什么!

您正在使用Time.deltaTime而不是Time.time(或任何其他计时器)

deltaTime绝不是0或1 - 它总是相同的,例如0.2

lerp在0和1之间进行插值,你必须将参数从0增加到1才能使其正常工作

试试这个:

一开始,只有一次:

float interpolationProgress = 0.0f;
bool interpolating = true;

然后每一帧:

if(interpolating) {
    interpolationProgress += 0.1f * Time.deltaTime;
    transform.rotation = Quaternion.Lerp(from, to, interpolationProgress);
    if(interpolationProgress >= 1.0f) {
        interpolating = false;
    }
}