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

