Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Tris

Treue Seele

  • »Tris« ist der Autor dieses Themas

Beiträge: 102

Wohnort: ~Stuttgart

  • Private Nachricht senden

1

20.05.2020, 16:58

[UNITY] Trigger, Gegner in Reichweite prüfen

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?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

20.05.2020, 17:33

So habe ich das derzeit umgesetzt und es scheint auch gut zu funktionieren.

Das sagt an sich schon alles. Solange es funktioniert würde ich mir da wenig Gedanken machen. Sollte das mal ein Bottleneck werden kannst du dich darum kümmern das performanter zu machen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

12.06.2020, 12:07

Erhöhe die Gegnerzahl auf 200; dann hat niemand mehr Durchblick und die Sache hat sich erledigt.

Tris

Treue Seele

  • »Tris« ist der Autor dieses Themas

Beiträge: 102

Wohnort: ~Stuttgart

  • Private Nachricht senden

4

12.06.2020, 15:52

Danke für eure Antworten. ^^


Erhöhe die Gegnerzahl auf 200; dann hat niemand mehr Durchblick und die Sache hat sich erledigt.


Das habe ich sogar schon mal getestet mit bis zu 1000 wenn ich mich richtig erinnere.
Ich weiß nicht ob es daran lag, dass ich das über den Editor getestet habe, aber da gab es ein Problem:
Navigation habe ich komplett mit der Unity eigenen Lösung umgesetzt.
Die Gegner erhaltenden Befehl auf den Spieler zuzugehen.
Aber ab einer bestimmten Anzahl an Gegnern laufen einige wirr herum (oder an die alte Position vom Spieler?).

5

16.06.2020, 13:22

Ka i

Na siehste, das Verhalten deiner Gegner zeigt erste Anzeichen einer theoretisch vorhandenen Intelligenz. Kannst du Gegner auch im Kreis gehen lassen oder spiralförmig von einem Punkt ausscheaermen lassen. Das sieht bestimmt super aus.

Mfg D.D. aus Kiel 8)

Werbeanzeige