簡體   English   中英

Unity3d保持多個GameObjects C#之間的最小距離

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM