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

Unity战斗系统开发:敌人受击时如何施加击退力?

Unity 敌人受击击退效果实现方案

要实现敌人受击向后击退的效果,核心逻辑是获取伤害来源的位置,计算远离攻击者的方向后给敌人刚体施加对应冲量,你可以参考以下修改方案:


代码修改部分

首先修改EnemyTakeDmg类的TakeDamage方法,增加伤害来源位置的入参,补充击退逻辑:

public class EnemyTakeDmg : MonoBehaviour
{
    public int health = 8;
    private Rigidbody myBody;
    public float knockBackForce = 5f;
    // 可选:标记是否正在受击击退,用于暂停敌人移动逻辑
    public bool isKnockedBack = false;

    public event System.Action OnDeath;

    private void Start()
    {
        myBody = GetComponent<Rigidbody>();
    }

    public void TakeDamage(int damage, Vector3 attackerPos)
    {
        health -= damage; 
        // 击退逻辑
        Vector3 knockBackDir = (transform.position - attackerPos).normalized;
        // 3D项目可选:忽略Y轴分量,避免敌人被向上击飞
        knockBackDir.y = 0;
        myBody.AddForce(knockBackDir * knockBackForce, ForceMode.Impulse);
        
        // 可选:标记击退状态,你可以在敌人移动脚本中判断这个状态,击退时不执行移动逻辑
        isKnockedBack = true;
        // 0.2秒后恢复可移动状态,时间可以根据你的游戏节奏调整
        Invoke(nameof(ResetKnockBackState), 0.2f);

        if(health <= 0)
        {
            Die();
        }
    }

    private void ResetKnockBackState()
    {
        isKnockedBack = false;
    }

    public void Die()
    {
        OnDeath?.Invoke();
        Destroy(gameObject);
    }
}

调用端修改

在你触发敌人受伤的逻辑处(比如玩家攻击判定的脚本),调用TakeDamage时需要额外传入攻击者的位置参数,示例如下:

// 玩家攻击脚本中的碰撞检测逻辑示例
private void OnTriggerEnter(Collider other)
{
    if(other.CompareTag("Enemy"))
    {
        EnemyTakeDmg enemy = other.GetComponent<EnemyTakeDmg>();
        if(enemy != null)
        {
            // 第二个参数传入玩家自身的位置作为伤害来源位置
            enemy.TakeDamage(2, transform.position);
        }
    }
}

常见问题排查

如果修改后仍无击退效果,可以按以下顺序检查:

  • 确认敌人的Rigidbody组件没有勾选Is Kinematic,勾选后刚体不会响应外力
  • 检查Rigidbody的Mass(质量)参数,如果质量过大,需要对应调大knockBackForce的数值
  • 确认方向计算没有写反,如果写成attackerPos - transform.position敌人会朝攻击者方向移动,而非向后退
  • 如果你做的是2D项目,把Rigidbody替换为Rigidbody2D,AddForce用法保持一致即可
  • 如果敌人有持续的移动逻辑,记得在移动脚本中判断isKnockedBack状态,击退期间不要执行移动赋值,否则移动代码会覆盖击退的力效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:39:03