Unity中if条件成立时如何实现2D角色按住按键自动连续跳跃
问题背景
- 开发场景:基于Unity引擎开发2D游戏,已实现基础的角色水平移动、地面检测跳跃功能,脚本可正常运行
- 现存问题:当前跳跃逻辑要求角色落地后必须松开空格键、再次按下才能触发下一次跳跃
- 预期效果:按住空格键不松开的状态下,角色接触地面判定生效时自动触发连续跳跃,无需重复松按按键
问题根源
原有代码使用Input.GetKeyDown(KeyCode.Space)作为跳跃触发的输入判断,该API仅在按键按下的第一帧返回true,后续持续按住按键的所有帧都会返回false。因此即使角色落地后isjumping状态被重置为非跳跃,只要玩家没有松开空格重新触发按键按下动作,跳跃逻辑就不会被执行。
另外原代码存在一处隐性bug:触发跳跃加力时没有同步更新isjumping状态,依赖OnCollisionExit2D切换状态会导致角色刚起跳、还未离开地面碰撞盒的几帧内仍被判定为在地面,可能触发异常多段跳。
修改方案
- 新增布尔变量
holdJump,用Input.GetKey(KeyCode.Space)持续检测空格键的按住状态(该API只要按键处于按住状态,每帧都会返回true) - 将跳跃执行逻辑抽为独立方法,触发跳跃时同步更新
isjumping状态,同时重置y轴速度、指定冲量力模式,统一跳跃手感 - 在地面接触判定的逻辑节点新增判断:角色落地时如果检测到玩家正按住跳跃键,直接自动触发跳跃
- 清理原代码中未被使用的冗余变量
moveY
修改后的完整代码如下:
using UnityEngine; public class Player2DController : MonoBehaviour { private Rigidbody2D rb; public float moveSpeed; private float horizontalInput; private bool isJumping; // 记录跳跃键按住状态 private bool holdJumpInput; public float jumpImpulse; public GameObject sqaureee; void Start() { rb = GetComponent<Rigidbody2D>(); } void Update() { horizontalInput = Input.GetAxis("Horizontal"); rb.velocity = new Vector2(horizontalInput * moveSpeed, rb.velocity.y); // 每帧更新跳跃键按住状态 holdJumpInput = Input.GetKey(KeyCode.Space); // 保留原有的按下瞬间跳跃逻辑 if (Input.GetKeyDown(KeyCode.Space) && !isJumping) { PerformJump(); } } // 抽离跳跃逻辑,避免重复代码 private void PerformJump() { // 跳跃前重置y轴速度,保证每次跳跃高度一致 rb.velocity = new Vector2(rb.velocity.x, 0); // 冲量模式更适合跳跃这种瞬间施加的力 rb.AddForce(new Vector2(0, jumpImpulse), ForceMode2D.Impulse); isJumping = true; } private void OnCollisionEnter2D(Collision2D collision) { GetComponent<SpriteRenderer>().color = Color.red; if (collision.gameObject.CompareTag("Ground")) { isJumping = false; // 落地时如果按住跳跃键,自动触发跳跃 if (holdJumpInput) { PerformJump(); } } } private void OnCollisionExit2D(Collision2D collision) { GetComponent<SpriteRenderer>().color = Color.white; if (collision.gameObject.CompareTag("Ground")) { isJumping = true; } } }
优化提示:如果需要做「土狼时间」「跳跃缓冲」之类的更顺滑的2D平台跳跃手感,可以在这个逻辑基础上新增对应的时间计数器即可,当前的输入状态拆分逻辑已经可以支持后续扩展。
内容的提问来源于stack exchange,提问作者Aaspreet
相关产品推荐
相关产品推荐

