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

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

1

04.02.2013, 14:08

Rennspiel, Ziellinie und aktuelle Position

Ich arbeite zur Zeit an einem Rennspiel mit Unity. Der Stil ist nicht realistisch gehalten sondern geht eher in die Richtung der alten Spiele wie Mario Cart etc.
Nun dabei gibt es zwei Probleme. Wie realisiere ich nun die Ziellinie. Meine Idee war einen Collider auf die Ziellinie zu setzen. Dann wird geguckt in welche Richtung man in diesen Collider hinein und wieder hinaus fährt. Wenn ich an einer Seite hinein und wieder hinaus fahre wird der Rundenzähler nicht erhöht. Wenn ich in richtiger Richtung durch den Collider fahre, wird der Zähler erhöht und wenn ich in falscher Richtung hindurch fahre wird er verringert. Beim Zähler handelt es sich jetzt nicht um die Rundenanzeige sondern einfach um einen Wert. Dadurch möchte ich verhindern, dass man an der Ziellinie im Kreis fährt und so seine Rundenzahl erhöhen möchte.
Nun ein weiteres Problem ist, wie ich ermitteln kann wer aktuell vorne liegt. Einerseits geht das über die Rundenzahl der beiden Spieler. Andererseits soll natürlich der Fortschritt auf der Strecke mit eingebracht werden. Dafür hatte ich mir überlegt Checkpoints auf der Strecke zu verteilen. Der Fortschritt wird nun durch die Checkpoints bestimmt. Je mehr Checkpoints ich verteile und je näher diese zusammen liegen, desto schöner wird das Ergebnis. Nicht 100%ig richtig, aber ein netter Hack.
Nun geht das ja vielleicht beides schöner und möglicherweise auch einfacher. Vor allem das mit den Checkpoints benötigt einiges an Nachbereitung pro Strecke. Google konnte mir nicht viel helfendes ausspucken und hier im Forum habe ich nur einen Thread gefunden, in welchem die selbe Idee mit den Checkpoints vorgeschlagen wird. Ist ja schon ein paar Jahre alt. Vielleicht gibts hier neue Anregungen;)
„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.“

2

04.02.2013, 14:53

Mag jetzt ein wenig naiv klingen, aber warum zählst du nicht einfach wie weit man insgesamt fährt und vergleichst das mit der Strecke der anderen?
Ok, im Kreis fahren. Aber dafür muss man ja auch mindestens ein mal in die falsche Richtung fahren, wo man das ganze wieder abziehen würde, man kommt also nicht "voran".
So hätte ich das jedenfalls gelöst...

MfG
Check

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

04.02.2013, 15:05

Und wenn ich jetzt im Zickzack über die Bahn fahre? Bin ich dadurch vor dem, der einfach Ideallinie fährt? Ich könnte die Strecke natürlich abhängig des Straßenverlaufs addieren, aber da muss ich dann an die Modelldaten ran. Das möchte ich eigentlich ungern, bzw bin mir nicht mal sicher ob das bei Unity ohne weiteres möglich ist. Sollte aber sicher auch einfacher möglich sein.
„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.“

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

4

04.02.2013, 16:03

Also ich hab von der Thematik so an sich keine Ahnung. Aber kann man nicht die Mittellinie (deren Länge) der Bahn als position nehmen und schauen wo sich der Spieler relativ/lotrecht zu befindet, und dann diesen Punkt mit dem Punkt eines anderen Spielers vergleichen? So hast du dann eine normale Distanz zwischen den beiden und kannst alles Weitere ableiten. Würde dann auch mit der Ziellienie funktionieren.
:love: := Go;

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »H5::« (04.02.2013, 16:08)


Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

04.02.2013, 19:45

Das würde im Prinzip meine Variante mit den Checkpoints erweitern. Ich könnte Punkte auf der Bahn verteilen. Dann gucke ich zwischen welchen zwei Punkten sich ein Spieler befindet und kann dann darüber den Abstand bestimmen. Dadurch könnte ich den Fortschritt auf der Strecke bestimmen. Die Lösung gefällt mir soweit ganz gut. Da muss ich zwar je nach Fahrstrecke einiges an Zeit investieren, aber gut. Danke für den Tipp. Wenn weitere Ideen da sind, immer her damit.
„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.“

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

6

05.02.2013, 10:37

wenn du nur Punkte auf der Strecke definierst, bist du wieder bei den Checkpoints, auch wenn nicht alle Punkte als Checkpoints für den Spieler sichtbar sind. Grundsätzlich würde ich es esser finden, wenn man die Strecke mit Hilfe von Splines o. ä. definiert, statt diese Splines mit Punkten anzunähern, allerdings denke ich mal, dass diese einen ziemlich großen Mehraufwand bedeuten...

Wie bereits erwähnt wurde, wird das Ziellinienproblem schon mit dem ersten Checkpoint einfacher. Wenn man die Zielline auch nur als einen weiteren Checkpoint betrachtet, dann muss der Spieler einfach nur alle Checkpoints in der richtigen Reihenfolge abfahren. So erspart man sich auch diesen Workaround mit der Ziellinie, die auf die Fahrtrichtung des Spielers eingeht.

Bedenke aber auch, dass sich nicht-lineare Streckenverläufe mit Checkpoints zwar eenfalls umsetzen lassen, allerdings eine gewisse Erweitung voraussetzen.

Das sind soweit erstmal meine Gedanken dazu.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

05.02.2013, 12:57

Wenn ich mit einem Spline die Strecke annähern könnte und abfragen könnte wie sich der Spieler relativ dazu befindet wäre das natürlich eine super Sache. Nur gibt es kein Feature bei Unity um Splines zu erstellen, oder ich bin mir dessen nicht bewusst. Das alles selbst zu coden dürfte schon extremer Aufwand sein und das würde ich mir lieber einfacher machen. Einen Pfad über Punkte anzunähern wäre nicht 100%ig, aber je nach Anzahl der Punkte ausreichend denke ich.
Mit Checkpoints meinte ich keine sichtbaren Punkte, sondern im Prinzip unsichtbare Punkte auf der Strecke die nur für die Bestimmung da sind. Das Problem ist hierbei, dass ich den Abstand eines Punktes zu einer Geraden berechnen müsste. Spontan fällt mir da keine Möglichkeit ein das sinnvoll zu programmieren. Bin mir eigentlich sicher, dass ich das schon mal bei einem anderen Problem umgesetzt habe. Naja könnte ich mal bei Google suchen.
Einfacher wäre es aber möglicherweise, wenn ich zuerst den Punkt bestimme, welcher dem Spieler am nächsten ist und dann den Abstand vom Spieler zum darauf folgenden Punkt bestimme. Dafür nehme ich den nächsten Punkt und nicht den mit dem geringsten Abstand, da sich der Spieler ja auch schon hinter diesem Punkt befinden kann.
„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.“

m3xx

Alter Hase

Beiträge: 434

Beruf: Student

  • Private Nachricht senden

8

05.02.2013, 15:18

Für diese 100% anzeige wie viel Prozent der Strecke du geschafft hast würde ich es sinnvoll halten, wenn du Punkte setzt, die Pixel zwischen denen Berechnen lässt und das dann durch 100 rechnen.
Dann weißte wie viel Pixel 1% sind. Und dann wäre es halt möglich den Spieler auch als einen Punkt zu definieren und dann berechnen lassen, wie viele Pixel er von den einzelnen Punkten entfernt ist.
Aber ich glaube das wäre einiges an Rechenleistung und Aufwand.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

05.02.2013, 18:21

@Schorsch: Und was, wenn Splines doch nicht so unheimlich kompliziert zu integrieren wären?
diese Idee ist mir gerade erst gekommen, aber man könnte ja diese Checkpoints erweitern, indem man zu jedem Checkpoint (und dem zugeordneten nachfolgenden) weitere Punkte definieren, welche dann zur Berechnung des Splines verwendet werden. Einem Checkpoint würde dann also immer der darauffolgende Checkpoint und beispielsweise 2 weitere Punkte zugewiesen werden, wodurch man dann beispielsweise eine Bézierkurve hätte.
ganz unproblematisch ist das natürlich nicht, weil die Berechnung des Abstands wohl etwas schwieriger werden dürfte und man müsste ein wenig tricksen, damit man beim Editieren (und nicht im fertigen Spiel) die Punkte und die Verbindungen sieht. Aber ich denke, wenn man sich ein wenig Zeit nimmt, dann ist das auch zu schaffen. ;)
Ein Problem, um welches man bei den Kurven nicht drumrum kommt: es ist nicht so einfach, diese so einzustellen, dass sie die Strecke bestmöglich wiederspiegeln, aber das ist vielleicht doch eher eine Frage dessen, wie viele Abstriche man in Sachen Genauigkeit machen kann...
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

05.02.2013, 18:52

Für diese 100% anzeige wie viel Prozent der Strecke du geschafft hast würde ich es sinnvoll halten, wenn du Punkte setzt, die Pixel zwischen denen Berechnen lässt und das dann durch 100 rechnen.
Dann weißte wie viel Pixel 1% sind. Und dann wäre es halt möglich den Spieler auch als einen Punkt zu definieren und dann berechnen lassen, wie viele Pixel er von den einzelnen Punkten entfernt ist.
Aber ich glaube das wäre einiges an Rechenleistung und Aufwand.

Pixel? Auf einer 3D-Strecke?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige