2011-03-20 47 views
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個立方體觸發器,立方體敵人將旋轉離開它。也嘗試了不同的角度。 但沒有運氣:(

我仍然在試圖找到一個解決方案。但是,如果你對此有一個更好的主意,你的幫助是非常appreceated :)提前

謝謝!

+0

待辦事項參與者有一定的目標,他們要努力實現? – Dialecticus 2011-03-20 16:38:16

+0

那麼......他們正在追逐一個英雄來打敗他,如果那是你的意思? – Amacoder 2011-03-20 17:18:39

回答

1

以下article可以幫到你。

簡而言之,當您的代理處於給定距離之下時,您的代理正在「相互排斥」。這是羊羣中的「分離」概念。真正有趣的是,你可以有一個取決於距離的輪換(也就是說,另一個代理非常接近意味着你必須轉身),並且你可以與多個代理進行交互。

在同一個網站,this可以幫助您搜索播放器。結合這兩種方法,你有代理人試圖在避開其他代理人的情況下抓住玩家。

問候 紀堯姆

2

你有幾個移動物體,其中一些可能妨礙其他物體。我建議你推遲移動所有那些在他們面前有移動障礙的物體。當所有自由移動的對象移動後,通過重複該過程嘗試移動所有其他對象,因爲在此過程中可能會釋放一些對象。你基本上遍歷了尚未移動的對象的列表,直到列表中沒有改變。

如果您沒有找到任何新的自由移動物體,請隨意處理剩下的物體。我建議您嘗試僅爲其中一個路線尋找替代路線,然後重複上述步驟。可能是因爲當一個物體脫落時,所有其他物體也不會脫落。對於剩餘的卡住對象,您可以重複此第二個過程。