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

