0

我有一个数组,其中填充了所有带有标签 Enemy 的对象。当一个敌人靠近另一个敌人时,它必须远离那个敌人或绕过它。

这就是我现在所拥有的:

foreach(Transform enemy in enemies){
    if(enemy == this.transform) continue;

    enemyPos = enemy;
    float enemyDistance = Vector3.Distance(enemy.transform.position, transform.position);

    if(enemyDistance < 8){
        transform.RotateAround (enemyPos.position, Vector3.up, 360 * Time.deltaTime);
    }
}

如果敌人靠得足够近,他们就会互相绕圈。还尝试使用 2 个立方体触发器,当敌人物体接触其中一个立方体时,立方体敌人会旋转远离它。也尝试了不同的角度。但没有运气:(

我仍在努力寻找解决方案。但是,如果您对此有更好的了解,我们将非常感谢您的帮助 :)

提前致谢!!!

4

2 回答 2

2

您有几个移动的物体,其中一些可能会妨碍其他物体。我建议您推迟移动所有前面有移动障碍物的物体。当所有自由移动的对象都被移动时,然后尝试通过重复该过程来移动所有其他对象,因为在此过程中某些对象可能会变得自由。您基本上循环遍历尚未移动的对象列表,直到列表中没有更改。

如果你没有找到任何新的自由移动的物体,那么你可以随意处理剩下的。我建议您尝试只为其中一个找到替代路线,然后重复上述过程。可能是当一个对象未​​卡住时,所有其他对象也都未卡住。您可以对其余的卡住物体重复第二个过程。

于 2011-03-20T17:44:08.530 回答
1

下面的文章可以帮助你。

简而言之,当您的代理在给定距离以下时,它们会互相“排斥”。这就是羊群中的“分离”概念。真正有趣的是,您可以根据距离进行旋转(即另一个非常近的代理意味着您必须用力转动)并且您可以与多个代理进行交互。

在同一站点中,可以帮助您搜索播放器。结合这两种方法,你的代理会试图抓住玩家,同时避开其他代理。

关于纪尧姆

于 2011-03-21T12:25:20.237 回答