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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:47:47