[英]Unity3d maintaining a minimum distance between multiple GameObjects c#
我有多個向玩家移動的敵人。 我試圖阻止它們彼此合並,即保持彼此之間的某種最小距離。 我正在嘗試的是這個(來自unity3d論壇):
enemy1.transform.position = (enemy1.transform.position -
enemy2.transform.position).normalized * distance + enemy2.transform.position;
但是,當我有> = 3個敵人時,即使將其應用於每個敵人組合,它們似乎仍然會聚在一起。
我需要一種更好的方法,因為該方法不起作用且無法擴展。
在敵人預制件周圍執行的操作是放置一個四邊形框,該框實際上是一個觸發元素,然后在您的敵人腳本上設置以下條件:如果另一個敵人(使用標記類型,我想是)碰到了四邊形框,則運行適當的代碼以阻止敵人靠近並防止敵人實際與該觸發框重疊。
您在問題中所舉的示例代碼看起來像是專門引用敵方單位,而不是實例實例,這很可能是一種不好的編碼方式,正如您所發現的那樣,處理未特定名稱的引用實體非常不靈活。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
private Transform otherEntity;
public float distance = 50.0f;
private Transform thisEntity;
void OnTriggerEnter(Collider other)
{
otherEntity = other.GetComponent<Transform>();
thisEntity = GetComponent<Transform>();
thisEntity.position = (thisEntity.position - otherEntity.position).normalized * distance + otherEntity.position;
}
}
我沒有測試上面的代碼,但是使用了您引用的代碼,從游戲組件中加載了所引用實體的變換值,因為自5.1版發布以來,這已改變了Unity中的很多代碼,您的代碼來源就是一個答案在2012年給出!
thisEntity
是腳本附加到的對象,通常是敵人之一。 otherEntity
是四元觸發中的對象(請記住,四元需要作為觸發元素引用。
輸入觸發器后,需要設置Entity
變量的值,以使其始終影響正確的other
元素。
(我的方法可能完全錯了,但我希望這會有所幫助。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.