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

Unity开发FlappyBird:设置每帧跳跃却仅生效一次的问题排查

FlappyBird 小鸟跳跃问题修复方案

问题根源

你的代码在Update每帧直接设置myRigidbody.velocity = Vector2.up * 10;,这会强制小鸟保持恒定的向上速度,完全覆盖了Unity物理系统的重力效果,导致小鸟不会下落,看起来就像“只能跳一次后停止”(实际是一直向上飞,没有正常的跳跃循环)。同时,逻辑上没有响应玩家输入,不符合FlappyBird“按一次跳一次”的核心机制。

修复方案

正确的逻辑应该是响应玩家输入(如空格键)时,给小鸟施加一次向上的力/速度,让重力自然拉它下落,具体代码如下:

using UnityEngine;

public class BirdController : MonoBehaviour
{
    public Rigidbody2D myRigidbody;
    public float jumpForce = 10f; // 可在Inspector中调整跳跃力度

    void Update()
    {
        // 检测空格键按下事件,仅触发一次跳跃
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 重置竖直方向速度,避免连续跳跃叠加过快的速度
            myRigidbody.velocity = new Vector2(myRigidbody.velocity.x, 0);
            // 施加向上的速度
            myRigidbody.velocity += Vector2.up * jumpForce;
            
            // 也可以用AddForce实现更自然的物理效果:
            // myRigidbody.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        }
    }
}

关键注意事项

  • 确保你的Rigidbody2D组件在Inspector中开启了重力(Gravity Scale设置为大于0的值,比如1)
  • 避免在每帧直接覆盖velocity值,这样会破坏物理系统的自然模拟
  • 使用Input.GetKeyDown而不是Input.GetKey,确保每次按键仅触发一次跳跃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:03:20