2016-11-30 80 views
1

我在做一個遊戲,我知道將要嵌入手榴彈內的任何GameObjects。在爆炸之前從榴彈中找到某個半徑範圍內的所有遊戲物體的最佳方法是什麼?我已經看到,一個辦法是太已經通過陣列的所有敵人/陣列中的對手,然後循環,看看有多少會在一定範圍內,但我不知道是否會有一個更好的方式來處理這一點。是什麼,以確定最佳的方式,如果有一定的區域

編輯:

您好,請,如果你看到這一點,由於一些原因我被禁賽罰款的問題只得到了1票這個問題。 (最有可能的,因爲這是我的第一個問題,所以我的賬號是被禁止非常敏感),它最初說,這是隻有1天的禁令,但顯然不是,因爲它已經被2天....

+1

如果所有相關的對象都對撞機,你可以檢索它們['Physics.OverlapSphere()'](https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html)。 – Serlite

+0

但是如果它們不與手榴彈的箱式對撞機重疊呢? Serlite – Peyton

+0

這不是如何'OverlapSphere()'作品 - 您指定的位置(可能是您的手榴彈)和一個半徑,它會檢查該球形區域內的所有對撞機。 – Serlite

回答

2

如果所有的要檢測的對象附有碰撞體,您可以使用Physics.OverlapSphere()。只需提供它的位置和半徑檢索球形區域內的所有對撞機:

Collider[] hitColliders = Physics.OverlapSphere(grenadePosition, explosionRadius); 

然後根據需要可以遍歷它們和應用的損害。希望這可以幫助!如果您有任何問題,請告訴我。

+0

這比我的方法更好...直到我不得不在我自己的遊戲中使用它並搜索具體功能時,才知道這一點。結束使用Physics.OverlapSphere函數。 – infmja

2

我認爲解決這個最好的辦法是,因爲你已經說了,有一個數組的對象。
我將通過其標記爲「敵人」的所有gameobjects設置了敵人的標籤「敵人」,然後循環。

foreach(GameObject gameObj in GameObject.FindGameObjectsWithTag("Enemy") { 
    // check if the current gameObj is in a certain range of your grenade object 
} 
相關問題