unity3d - Unity在自由落体时旋转播放器不起作用
问题描述
我有一个从斜坡上发射的球员。在那之前一切正常。
当玩家离开坡道时,他们会向上看,所以我想做的是平滑地改变玩家(X,Y,Z)的旋转;从当前的一个到一个新的。
我总是需要 y = -180
我总是需要 z = 0
我需要 x = (MinAngle, MaxAngle) -> 也许这些值 (-30, 30)
X 的原因(MinAngle,MaxAngle)
我试图弄清楚如何在某个轴上平滑地旋转播放器并以某个角度停止,以便可以在此处应用它,并可能与播放器按钮(上/下)一起应用
transform.rotation 线导致问题
rotCur = Quaternion.FromToRotation(transform.up, hit.normal) * transform.rotation;
transform.rotation = Quaternion.Lerp(Quaternion.Euler(30,-180,0), rotCur, Time.deltaTime * 5);
解决方案
你的问题到底是什么?您只说它“不起作用”-但究竟会发生什么?
你试过这个:
transform.rotation = Quaternion.Lerp(rotCur, Quaternion.Euler(30,-180,0), Time.deltaTime * 5);
交换第一个和第二个参数
我假设 rotCur 的意思是“当前旋转”,在 Quaternion.Lerp 中,第一个参数是“from”,第二个是“to”
编辑:你试过这个:
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;
}
}
推荐阅读
- vb.net - 删除或删除在 PictureBox 上绘制的 Rectangle
- qnamaker - 如何将 QnaMaker 与 oneNote 链接
- node.js - Docker 创建和运行镜像失败
- php - PHP Foreach 查询检查
- docusignapi - Docusign、预填充模板、文本和无线电混淆 - 通用数据选项卡?
- excel - 直到下一行的自动填充连续日期具有值
- php - 如何从 Stripe 对象 PHP 中获取关联数组
- autodesk-forge - 尝试从 BIM 360 URN 显示 SVF 时出错
- pandas - 计算带有条件的连续熊猫数据框行之间的天差
- java - 使用 Volley / RecyclerView 从按钮单击的 JSON 中提取新信息