You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity旋转对象松开方向键后直接跳转而非按speed匀速归位问题

问题原因分析
  • 核心逻辑错误:你的代码仅对transform.eulerAngles.z < 0的场景做了渐变处理,其余场景直接强制赋值rotation = 0,是角度跳变的直接原因。
  • Euler角取值陷阱:Unity中transform.eulerAngles返回的角度值域为0~360,不会出现负数,比如-10°的旋转会被转换为350°返回,你写的小于0的判断分支永远不会触发。
修正方案

直接操作你自定义的rotation变量即可,用Unity内置的Mathf.MoveTowards方法实现匀速向目标值(0)移动的效果,完全规避角度转换问题,修改后的逻辑如下:

// 方向键输入判断逻辑修改
if (!Input.GetKey(KeyCode.RightArrow) && !Input.GetKey(KeyCode.LeftArrow)) {
    // 匀速将rotation向0移动,移动速度由speed定义
    rotation = Mathf.MoveTowards(rotation, 0, speed * Time.deltaTime);
}
// 原有旋转限制和赋值逻辑保持不变即可
rotation = Mathf.Clamp(rotation, -30, 30);
transform.localRotation = Quaternion.Euler(0, 0, rotation);

Mathf.MoveTowards会自动处理rotation正负的情况:大于0时自动递减,小于0时自动递增,到达0后就不会再变化,刚好符合你匀速归位的需求。

内容的提问来源于stack exchange,提问作者Stanley Easthope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:27:02