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

Unity自定义按键监听无Axis平滑过渡效果如何解决

问题原因

原生Input Axis轴输入内置了按下时数值渐变上升、抬起时渐变回落的平滑逻辑。你当前的代码仅在GetKeyDown(按下瞬间)、GetKeyUp(抬起瞬间)两个单帧触发的事件中直接给flyfloat硬赋值1和0,没有逐帧过渡过程,必然出现0/1直接跳变的问题。

修复方案
  • 替换按键检测逻辑:弃用单帧触发的GetKeyDown/GetKeyUp,改用持续检测按键按住状态的GetKey,在Update生命周期内逐帧对flyfloat做插值,模拟原生Axis的平滑效果,同时保留自定义按键的支持。
  • 先在脚本内定义和原生Axis对齐的手感调节参数,方便匹配原有操作手感:
[Header("按键平滑参数")]
public float sensitivity = 3f; // 按键按下时数值上升速率,对应原生Axis的Sensitivity
public float gravity = 3f; // 按键抬起时数值回落速率,对应原生Axis的Gravity
private KeyCode flyTriggerKey;
  • 用以下逐帧逻辑替换原有硬赋值代码:
void Update()
{
    // 读取用户自定义的按键配置
    flyTriggerKey = KeyManager.instance.keyscode[0];

    if (Input.GetKey(flyTriggerKey))
    {
        // 按住按键时逐帧向1趋近,不直接跳值
        flyfloat = Mathf.MoveTowards(flyfloat, 1f, sensitivity * Time.deltaTime);
    }
    else
    {
        // 松开按键时逐帧向0回落,不直接清零
        flyfloat = Mathf.MoveTowards(flyfloat, 0f, gravity * Time.deltaTime);
    }
}
  • 可选优化:
    • 如果需要更柔和的缓动效果,可以将Mathf.MoveTowards替换为Mathf.Lerp,调整插值系数即可获得不同的缓动手感。
    • 如果后续要支持反向功能按键,可参考原生Axis的Snap逻辑,检测到反向键按下时直接将flyfloat向反方向插值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:06:23