2016-11-30 6 views
1

Ich mache ein Spiel, in dem ich Granaten einbetten möchte. Was wäre der beste Weg, um alle Spielobjekte in einem bestimmten Umkreis von der Granate zu finden, bevor sie explodiert? Ich habe bereits gesehen, dass ein Weg auch darin besteht, alle Feinde/Gegner in einem Array zu haben und dann durch das Array zu laufen, um zu sehen, wie viele in einem bestimmten Gebiet wären, aber ich frage mich, ob es einen besseren Weg geben könnte.Was ist der beste Weg zu bestimmen, ob es irgendwelche GameObjects in einem bestimmten Gebiet gibt?

Edit:

Hallo, bitte, wenn Sie das sehen, stimmen diese Frage bis ich aus irgendeinem Grund für eine feine Frage verboten wurde, die nur 1- bekam. (am wahrscheinlichsten, weil es meine erste Frage war, so war mein Konto sehr anfällig für das Verbot) Es hieß ursprünglich, es sei nur ein 1-Tages-Verbot, aber anscheinend nicht, wie es schon zwei Tage gewesen ist.

+1

Wenn alle relevanten Objekte Beschleunigern haben, können Sie mit ihnen abrufen können [ 'Physics.OverlapSphere()'] (https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html). – Serlite

+0

Was ist, wenn sie sich nicht mit dem Box Collider der Granate überschneiden? Serlite – Peyton

+0

So funktioniert 'OverlapSphere()' nicht - Sie geben eine Position (wahrscheinlich wo Ihre Granate ist) und einen Radius an und überprüft alle Kollider innerhalb dieses sphärischen Bereichs. – Serlite

Antwort

2

Wenn alle Objekte, die erkannt werden sollen, an denen Collider angeschlossen sind, können Sie verwenden Physics.OverlapSphere(). liefern sie nur eine Position und einen Radius alle Beschleunigern in einem kugelförmigen Bereich abzurufen:

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

Dann können Sie Schleife durch sie und anwenden Schaden je nach Bedarf. Hoffe das hilft! Lass es mich wissen, wenn du irgendwelche Fragen hast.

+0

Das ist viel besser als mein Ansatz ... wusste nicht darüber, bis ich es in meinem eigenen Spiel verwenden musste und suchte nach einer bestimmten Funktion, die das tut. Beendet mit der Physics.OverlapSphere-Funktion. – infmja

2

Ich denke, der beste Weg, dies zu erreichen, ist, wie Sie bereits sagten, die Objekte in einem Array zu haben.
Ich würde das Tag "Feind" für die Feinde setzen und dann alle Spielobjekte durchlaufen, die mit "Feind" markiert sind.

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