Hallo zusammen,
in einem Unity Project möchte ich prüfen ob sich Gegner in Reichweite befinden.
Mir fallen auch einige Möglichkeiten ein, aber ich bin mir nicht sicher welche "eleganter", performanter bzw. praktischer ist.
Ausgangssituation:
- Figur kann bis zu 2 Waffen gleichzeitig tragen
- Waffe kann Nah- oder Fernkampfwaffe sein
- Waffen haben unterschiedliche Reichweiten, Nahkampf z.B. 1m für Schwert, 2m für Speer, Fernkampf z.B. 20m.
- Hat man 2 Waffen ausgerüstet hat, kann man sagen welches die Primärwaffe sein soll. D.h. gibt man einen Angriffsbefehl auf eine Einheit und die Figur läuft solange Richtung Gegner bis er nah genug am Gegner ist um die gewählte Waffe zu benutzen.
- Während die Figur auf den anzugreifenden Feind zu läuft soll sie Feinde die auf dem Weg dorthin aber ebenfalls angreifen. Mit beiden Waffen, falls ausgerüstet und in deren Reichweite.
Nun kann man in Unity pro GameObject nur einen Collider anhängen wenn ich das richtig weiss, bzw. man kann bei OnTriggerEnter nicht bestimmen auf welchen Collider reagiert werden soll. Oder übersehe ich da was?
Darum habe ich pro ausgerüstete Waffe der Figur ein ChildGameObject angegängt und an diese einen SphereCollider mit dem Radius der Waffenreichweite.
Wenn nun ein Feind in den Collider eintritt feuert die entsprechende Waffe auf diesen.
So habe ich das derzeit umgesetzt und es scheint auch gut zu funktionieren.
Alternativ habe ich überlegt ob ich für alle Gegner die auf dem Schirm sind die Distanz von der Figur zu diesen abfrage. Wenn das nun aber 50 Gegner sind, müsste ich pro Frame 50 mal die Distanz berechnen.
Das scheint mir performancetechnisch nicht so ideal. Mit Collidern pro Waffe wären das z.B. 5 Gegner die gerade in Reichweite sind und 45 ausserhalb und ich müsste nur 5 mal die Distanz berechnen.
Es soll nämlich der nächste Feind angeriffen werden.
Hat jemand Ahnung wie man das am besten umsetzen kann?