Unity引擎开发2D平台游戏无法实现玩家跳跃 求参考代码
Unity 2D 平台游戏玩家跳跃实现
前置配置要求
先确认玩家和场景的基础组件配置正确,否则代码无法正常生效:
- 玩家游戏对象挂载
Rigidbody2D组件,将重力缩放参数调整为2~4区间的数值(后续根据跳跃手感微调),冻结刚体的Z轴旋转避免角色意外倒地 - 玩家游戏对象挂载2D碰撞体(推荐用
CapsuleCollider2D,卡平台边缘的概率比方形碰撞体低) - 所有可站立的地面/平台对象挂载2D碰撞体,统一设置为
Ground专属图层 - 在玩家对象下创建一个空的子对象,挪到玩家碰撞体的最底端位置,用来做落地检测的判定点
核心实现代码
新建C#脚本命名为PlayerJump.cs,直接挂载到玩家对象上,把对应参数在Inspector面板拖好赋值即可。默认的"Jump"输入轴对应键盘空格键,不需要额外配置输入,跑通基础功能后可以自行修改按键映射:
using UnityEngine; public class PlayerJump : MonoBehaviour { [Header("跳跃参数")] public float jumpForce = 7f; // 跳跃力度,从5开始往上调试找合适手感 public Transform groundCheckPoint; // 之前创建的脚底检测点子对象拖到此处 public LayerMask groundLayer; // 选中之前设置的Ground图层 public float checkRadius = 0.2f; // 落地检测的判定范围 private Rigidbody2D _rb; private bool _isGrounded; private bool _jumpPressed; void Awake() { // 自动获取玩家身上的刚体组件 _rb = GetComponent<Rigidbody2D>(); } void Update() { // 每帧检测是否站在地面上 _isGrounded = Physics2D.OverlapCircle(groundCheckPoint.position, checkRadius, groundLayer); // 检测跳跃输入 if (Input.GetButtonDown("Jump") && _isGrounded) { _jumpPressed = true; } } void FixedUpdate() { // 物理逻辑统一放在FixedUpdate里执行,避免帧率波动导致跳跃手感不稳定 if (_jumpPressed) { // 跳跃前先把Y轴速度清零,避免下落状态按跳跃跳不高 _rb.velocity = new Vector2(_rb.velocity.x, 0f); _rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse); _jumpPressed = false; } } }
常见问题排查
- 按跳跃键没反应:先检查
Ground图层有没有选对、检测点位置是不是在玩家脚底、检测半径是不是太小没触碰地面 - 空中能无限跳:要么是检测半径设太大,贴墙/蹭到平台边误判落地,要么是图层选错把玩家自己的碰撞体判定成了地面
- 跳跃手感飘/沉:优先调整刚体的重力缩放参数,再微调跳跃力数值,重力越高对应的跳跃力需求越大
内容的提问来源于stack exchange,提问作者Sarvesh
相关产品推荐
相关产品推荐

