Unity按钮控制飞船旋转过快,如何实现平滑旋转角度?
解决Unity按钮控制飞船旋转不平滑的问题
我懂你遇到的困扰——直接给horizontal赋值±7会让旋转参数瞬间跳变,飞船自然就“猛转”,完全没有平滑过渡的感觉。咱们可以通过渐进式调整参数+按钮按下/抬起状态管理来修复这个问题,具体方案如下:
核心思路
问题根源在于你直接修改了horizontal的最终值,没有给旋转留过渡的过程。我们需要引入一个「目标值」,让实际的horizontal通过平滑插值逐步趋近目标值,这样旋转角度就会慢慢变化,实现自然的平滑效果。
修改后的完整代码
public float tilt = -5f; public float horizontal; public float vertical; // 新增:目标水平参数,定义最终要达到的水平值 private float targetHorizontal = 0f; // 新增:平滑过渡速度,数值越大过渡越快,可根据手感调整(推荐3-8之间) public float smoothSpeed = 5f; Rigidbody player; void Start() { player = GetComponent<Rigidbody>(); } void Update() { // 关键:用Lerp实现平滑过渡,Time.deltaTime保证帧率无关 horizontal = Mathf.Lerp(horizontal, targetHorizontal, smoothSpeed * Time.deltaTime); player.velocity = new Vector3(horizontal, vertical, 7f); var clamX = Mathf.Clamp(player.position.x, xmin, xmax); var clamY = Mathf.Clamp(player.position.y, ymin, ymax); player.position = new Vector3(clamX, clamY, player.position.z); player.rotation = Quaternion.Euler(vertical*tilt, 0, horizontal * tilt); } // 向左按钮按下时,设置目标水平值 public void Onleft() { targetHorizontal = -7f; } // 向左按钮抬起时,重置目标值为0(松开后自动回正) public void OnLeftUp() { targetHorizontal = 0f; } // 向右按钮按下时,设置目标水平值 public void OnRigth() { targetHorizontal = 7f; } // 向右按钮抬起时,重置目标值为0 public void OnRightUp() { targetHorizontal = 0f; } // 复位按钮(如果需要) public void Up() { targetHorizontal = 0f; }
按钮事件设置补充
你之前只绑定了按钮的PointerDown事件,现在需要额外绑定PointerUp事件:
- 给左按钮绑定:
PointerDown→Onleft,PointerUp→OnLeftUp - 给右按钮绑定:
PointerDown→OnRigth,PointerUp→OnRightUp
这样按住按钮时,飞船会慢慢转向对应的方向;松开按钮后,又会慢慢回正,完全解决了瞬间旋转的问题。
手感优化建议
- 如果觉得转向太快/太慢,调整
smoothSpeed的值:数值越大,过渡越快;数值越小,过渡越平缓。 - 如果觉得旋转角度太大/太小,可以调整
targetHorizontal的±7值,或者调整tilt的数值,找到适合你游戏的手感。
内容的提问来源于stack exchange,提问作者Ilnur
相关产品推荐
相关产品推荐

