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

Unity 2D安卓游戏:如何通过单次触屏给Rigidbody2D添加力实现跳跃?

解决Unity 2D安卓触屏单次跳跃问题

Hey! 我瞅了下你的代码,发现问题出在触屏检测的逻辑上——你现在用的Input.touchCount > 0会让程序每帧都触发跳跃,只要屏幕被按住就一直跳,这显然不是你想要的单次触屏跳一次的效果。咱们调整下触屏检测的逻辑就能搞定!

核心思路:检测触屏的「按下瞬间」

Unity的触屏输入提供了TouchPhase枚举,其中TouchPhase.Began只会在手指刚接触屏幕的那一帧触发一次,完全匹配单次触屏触发跳跃的需求。

修改后的完整代码

我给你调整了代码,加了详细注释:

public Rigidbody2D _playerRB;
public bool _canMove;
public float _speed; // keep this above cam speed (relative)
public float _jumpForce;

void Start() {
    _playerRB = GetComponent<Rigidbody2D>();
}

void Update() {
    // 保持玩家的水平移动逻辑不变
    _playerRB.velocity = new Vector2(_speed, _playerRB.velocity.y);

    // 先判断是否有触摸输入
    if (Input.touchCount > 0) {
        // 获取第一个触摸点(适合单指操作的小游戏)
        Touch firstTouch = Input.GetTouch(0);
        
        // 只在手指刚按下屏幕的瞬间执行跳跃
        if (firstTouch.phase == TouchPhase.Began) {
            // (可选)如果想防止空中连跳,这里可以加落地判断
            // 比如提前定义一个_isGrounded变量,只有_isGrounded为true时才允许跳跃
            _playerRB.velocity = new Vector2(_playerRB.velocity.x, _jumpForce);
        }
    }
}

新手友好的额外提示

  • 防止空中连跳:如果你的游戏不允许玩家在空中多次跳跃,可以给玩家加个地面检测——比如在玩家脚下放一个小的Trigger碰撞器,或者用Physics2D.OverlapCircle检测玩家下方是否接触地面,然后设置一个_isGrounded布尔值,只有当_isGrounded为true时才执行跳跃逻辑。
  • 测试技巧:在Unity编辑器里,你可以用鼠标左键模拟触屏操作;如果要更真实的测试,直接打包APK放到安卓设备上就行。
  • 多指支持:如果你的游戏需要多指操作,可以调整触摸点的索引(比如Input.GetTouch(1)获取第二个触摸点),但单指小游戏用第一个触摸点就足够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:39:23