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
相关产品推荐
相关产品推荐

