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
相关产品推荐
相关产品推荐

