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

Unity 2D角色无法获得斜向击退力,仅垂直跳跃问题排查

问题排查与解决思路
  • 检查PlayerMovement的横向控制逻辑
    最可能的原因是PlayerMovement脚本在每帧(Update/FixedUpdate)中持续重置了刚体的横向速度,比如类似以下代码:

    rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);
    

    这种写法会直接覆盖击退施加的横向冲量,导致角色只有垂直方向的移动。解决方法是给PlayerMovement添加一个击退状态标记,在移动逻辑中跳过横向控制:

    // 在PlayerMovement中添加
    public bool isInKnockback;
    
    // 移动逻辑处修改
    if (!isInKnockback)
    {
        rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);
    }
    

    然后在PlayerOnTrigger的击退逻辑中设置这个状态,并通过协程在一段时间后恢复:

    if (collision.gameObject.CompareTag("Enemy"))
    {
        pm.isInKnockback = true;
        rb.AddForce(new Vector2(dirc,1) * 3, ForceMode2D.Impulse);
        StartCoroutine(EndKnockback(0.2f));
    }
    
    IEnumerator EndKnockback(float delay)
    {
        yield return new WaitForSeconds(delay);
        pm.isInKnockback = false;
    }
    
  • 检查Rigidbody2D组件设置
    打开玩家的Rigidbody2D面板,确认Constraints中没有勾选Freeze Position X——如果锁定了X轴,任何横向力都不会生效。另外可以适当增大击退的力值(比如把3改成5),如果玩家刚体质量较大,小冲量可能表现不明显。

  • 测试直接设置速度替代冲量
    暂时替换AddForce的代码为直接设置velocity,验证横向移动是否生效:

    rb.velocity = new Vector2(dirc * 4, 4);
    

    如果这样能看到横向移动,说明是冲量被其他逻辑抵消;如果还是只有垂直移动,那需要排查是否有其他脚本修改了刚体状态,或者碰撞层设置存在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:09:51