我有一个从斜坡发射的玩家。一切正常,直到那一点。
当玩家离开坡道时他们看起来有点向上,所以我想要做的是平稳地改变玩家(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);
答案 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;
}
}