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

Unity中追击玩家的实例化敌人重叠问题求助

解决俯视RPG敌人追击玩家时重叠的问题

问题根源

所有敌人都直接朝着玩家坐标移动,完全不考虑彼此的存在;加上你用Rigidbody2D.MovePosition直接设置位置,不会触发物理引擎的碰撞推开逻辑,自然会挤成一团。另外你的OnTriggerExit2D里的等待逻辑是错误的,会直接卡死主线程,得先修复这个问题。

分步修复

1. 替换错误的等待逻辑

原来的while循环会阻塞游戏主线程,改成协程实现延迟停止追击:

private void OnTriggerExit2D(Collider2D collision)
{
    if (chase)
    {
        StartCoroutine(StopChaseAfterDelay());
    }
}

private IEnumerator StopChaseAfterDelay()
{
    yield return new WaitForSeconds(1f);
    chase = false;
}

2. 添加敌人互相避让逻辑

先给敌人的Rigidbody2D做基础设置:

  • 重力设为0
  • 碰撞检测模式改成Continuous(防止高速移动穿模)
  • 勾选Freeze Rotation Z(俯视视角不需要旋转)

然后修改FixedUpdate的移动逻辑,加入避开其他敌人的判断:

void FixedUpdate()
{
    if (!GameManager.instance.battleActive && chase)
    {
        // 计算朝向玩家的基础方向
        Vector2 dirToPlayer = (CameraController.instance.target.position - transform.position).normalized;
        
        // 计算避开其他敌人的方向
        Vector2 avoidDir = Vector2.zero;
        // 检测当前敌人周围1单位内的其他敌人(记得给敌人单独建个Enemy层)
        Collider2D[] nearbyEnemies = Physics2D.OverlapCircleAll(transform.position, 1f, LayerMask.GetMask("Enemy"));
        foreach (var enemyCol in nearbyEnemies)
        {
            if (enemyCol.gameObject != gameObject)
            {
                // 计算远离其他敌人的方向
                Vector2 away = (transform.position - enemyCol.transform.position).normalized;
                avoidDir += away;
            }
        }
        
        // 合并两个方向,0.8是避让权重,数值越大越优先避让
        Vector2 finalDir = (dirToPlayer + avoidDir * 0.8f).normalized;
        
        // 用AddForce代替MovePosition,让物理引擎处理碰撞
        m_Rigigbody.velocity = finalDir * speed;
    }
    else
    {
        // 不追击时停下
        m_Rigigbody.velocity = Vector2.zero;
    }
}

3. 调整碰撞体设置

  • 实心胶囊碰撞体不要开Is Trigger,让它成为物理碰撞体,这样敌人之间能被物理引擎推开
  • 触发战斗的圆形碰撞体保持Is Trigger勾选,专门用来检测玩家进入追击范围

额外优化建议

  • 可以加个最小追击距离,当敌人离玩家小于某个值时停止移动,避免一直贴在玩家身上
  • 调整避让权重的数值,根据你的游戏手感微调,找到最合适的平衡

内容的提问来源于stack exchange,提问作者Mike the Scripter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:33:14