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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:30:10