远离目标

时间:2011-03-20 14:39:39

标签: c# unity3d

我有一个数组,其中包含标签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个立方体触发器,当一个敌人的物体接触其中一个立方体时,立方体的敌人将远离它旋转。也尝试了不同的角度。  但没有运气:(

我仍在努力寻找解决方案。但如果您对此有了更好的了解,那么您的帮助就会非常有用:)

提前致谢!!!

2 个答案:

答案 0 :(得分:2)

你有几个移动的物体,其中一些可能会妨碍其他物体。我建议你推迟移动所有那些在他们面前有移动障碍的物体。当移动所有自由移动的对象然后通过重复该过程尝试移动所有其他对象,因为在该过程中一些对象可能变得空闲。在列表中没有任何变化之前,你基本上遍历尚未移动的对象列表。

如果您没有找到任何新的自由移动物体,请随意处理其余部分。我建议您尝试仅为其中一个找到替代路线,然后重复上述步骤。可能是当一个物体脱落时,其他所有物体也都会脱落。您可以对其余卡住的对象重复此第二个过程。

答案 1 :(得分:1)

以下article可以为您提供帮助。

简而言之,当你的代理人在给定的距离之下时,他们会互相“排斥”。这是羊群中的“分离”概念。真正有趣的是,你可以进行一个取决于距离的旋转(即非常接近你需要转动的另一个代理),并且你可以与多个代理进行交互。

在同一网站中,this可以帮助您搜索播放器。结合这两种方法,你就有了试图捕捉玩家同时避开其他代理的代理。

问候 纪尧姆