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

2D生存游戏史莱姆碰撞后未被AddForce击退问题求助

问题分析与解决方案

你遇到的核心问题是史莱姆的AI移动逻辑持续覆盖了击退力的效果——虽然AddForce已经执行,但AI每帧都在施加移动力/设置速度,直接抵消了击退的冲量,导致看不到击退效果。结合你的代码和需求,给出以下修复方案:

1. 确认击退方向

首先确保击退方向是远离玩家的,当前代码的方向计算是正确的:

// 史莱姆位置减去玩家位置,归一化后即为远离玩家的方向
Vector2 kbDirection = (transform.position - player.transform.position).normalized;

如果之前反转方向会导致史莱姆冲向玩家,保持当前方向即可。

2. 添加击退状态锁,暂停AI移动

给史莱姆增加一个击退状态标记,在击退期间暂停AI的追踪移动,避免抵消击退力:

修正后的击退相关代码

private Rigidbody2D slimeRb;
private Transform player;
private bool isKnockedBack = false;
private float knockbackDuration = 0.2f; // 击退持续时间,可根据手感调整
public float knockbackForce = 150f; // 把力设为可调整变量,方便测试

void Awake()
{
    slimeRb = GetComponent<Rigidbody2D>();
    // 假设player是已获取的玩家Transform引用
}

public void AddKnockback()
{
    Vector2 kbDirection = (transform.position - player.transform.position).normalized;
    slimeRb.AddForce(kbDirection * knockbackForce, ForceMode2D.Impulse);
    
    // 开启击退状态,暂停AI移动
    isKnockedBack = true;
    Invoke(nameof(ResetKnockbackState), knockbackDuration);
    
    Debug.Log("KB");
}

private void ResetKnockbackState()
{
    isKnockedBack = false;
}

void OnCollisionEnter2D(Collision2D collision)
{
    // 推荐用CompareTag替代直接判断tag,性能更优
    if(collision.gameObject.CompareTag("Player"))
    {
        collision.gameObject.GetComponent<PlayerActions>().playerHealth--;
        AddKnockback();
    }
}

在AI移动代码中加入状态判断

在你的史莱姆追踪移动逻辑中,加入击退状态的判断,确保击退期间不执行AI移动:

public float moveSpeed = 3f;

void Update()
{
    // 击退期间跳过AI追踪逻辑
    if(isKnockedBack) return;
    
    // 原有的AI追踪移动逻辑
    Vector2 moveDir = (player.position - transform.position).normalized;
    slimeRb.velocity = moveDir * moveSpeed;
}

3. 额外排查点

  • 刚体参数:如果史莱姆刚体的Mass过大,或者Drag(阻力)值过高,100的力可能不足以产生明显击退效果,可以适当增大knockbackForce(比如调到200-300),或降低Drag值。
  • 碰撞设置:确保史莱姆和玩家的碰撞体均未勾选Is Trigger,且Layer之间没有设置碰撞忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:52:12