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

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

1

19.07.2017, 08:15

Intelligente 3D Platformer Steuerung

Hallo,

ich arbeite grade an einer Steuerung für 3D Platformer wie z.B. Super Mario 64, Banjo Kazooie, Zelda oder Spyro etc. etc. da gab es damals ja einige.

Nun habe ich die Steuerung schon ganz anständig gebastelt, der Spieler bewegt sich relativ zur Kamera.





Nun ist es mit dieser Steuerung nicht möglich, auf die Kamera zuzulaufen oder sich nach links/rechts zu bewegen und die Kamera bleibt währenddessen stehen.

Also war unter anderem mein Gedanke, die Steuerung so umzubauen, dass die Kamera dem Spieler nur noch folgt, sobald er sich weit entfernt hat. Ansonsten steht die Kamera immer auf

C#-Quelltext

1
transform.lookAt(playerObject);


Das wäre aber glaube ich unpassend, da die Kamera bei Wänden stehen bleibt und durch die Wand guckt.Ich müsste also permanent einen Raycast zum Spieler feuern, um zu gucken, ob sich etwas im Weg befindet und dann reagieren.

Da bin ich mir aber generell unsicher, wie die Spiele von damals genau umgesetzt worden sind. Hat jemand eine Idee für mein bereits vorhandenes Script, ob ich dieses modifizieren kann? Also ich glaube ich habe mit dem Script schon den richtigen Weg eingeschlagen, aber zur Kamera hin oder seitlich laufen und die Kamera bleibt stehen, ist mit diesem Code nicht möglich.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

19.07.2017, 10:20

War es nicht so dass die Kamera an sich dem Spieler folgt, läuft der Spieler jedoch in Richtung Kamera so bleibt die Kamera stehen, der Spieler läuft unter bzw neben ihr her bis sie sich wieder im Rücken befindet. Erst danach folgt sie dem Spieler wieder. So zumindest habe ich es im Kopf. Da wirst du vermutlich mit den Skripten die Unity zur Kameraverfolgung bietet nicht weiter kommen. Du wirst da vermutlich eine eigene Komponente schreiben müssen. Hast du alternativ mal im Store geguckt?
„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.“

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

3

19.07.2017, 10:41

Achso eh, das ist alles meins :D Im Store habe ich noch nie geschaut ?(

Dein Gedanke mit dem Folgen, sobald sich der Spieler nicht mehr in Reichweite befindet, hatte ich ja auch genannt. Ich war mir nur unsicher, ob das wirklich so ist. Denn sobald "Mario" links um die Ecke läuft guckt die Kamera ja gegen die Ecke. Quasi.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

19.07.2017, 11:08

Denn sobald "Mario" links um die Ecke läuft guckt die Kamera ja gegen die Ecke. Quasi.

Gib der Kamera einen sphärischen Collider.
„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.“

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

5

19.07.2017, 12:47

Also meine Idee war, dass die Kamera den Spieler immer nur anguckt und sobald er sich weiter weg bewegt, sie ihm folgt. Bewegt er sich hinter eine Wand, dann soll der Spieler selbst die Kamera nach links oder rechts innerhalb einer Kreisbahn schwenken.

Renegade

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

6

19.07.2017, 14:04

Zuerst einmal sollte eine Kamera kein sphärischen Collider haben. Die Kamera sollte auch nicht auf Input reagieren, wie in deinem Code, sondern auf die Veränderung von Rotation und Position des Spielers. Ein gutes Beispiel für eine simple Third-Person Kamera ist die Standardkamera aus Unreal. Im Prinzip macht diese folgendes:
1. Sobald sich der Charakter bewegt und eine definierte Distanz verlässt, interpoliert die Kamera "hinterher". Das hat eine Art Gummiband-Effekt.
2. Zwischen Kamera und anvisierten Charakter wird ein Ray geschossen und auf Kollision mit Objekten dazwischen geprüft. Hier gibt es zwei gängige Vorgehensweisen:
a. Die Kamera bewegt sich soweit auf den Spieler zu, dass das blockierende Objekt hinter der Kamera liegt
b. Das verdeckende Objekt erhält eine Transparenz, solange es zwischen Kamera und Charakter steht
(c.) Manche Spiele machen hier auch gar nichts.
3. Wenn sich der Charakter dreht, wird die Kamera nicht mit rotiert, sondern erst wenn sich der Charakter bewegt und der Winkel zwischen den Vorwärtsvektoren des Spielers und der Kamera eine definierten Bereich verlässt (Aufgepasst: die Vector3.Angle Methode in Unity verrät dir nichts über den Zeigersinn, sondern gibt dir immer nur den kleinsten Winkel zwischen den Vektoren). Die Kamera macht dann eine sphärische Interpolation um den Charakter.
Liebe Grüße,
René

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Renegade« (19.07.2017, 14:12)


Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

7

19.07.2017, 15:24

So war ja mein zuletzt geposteter Gedanke.. Muss ich dann wohl mal umsetzen

Werbeanzeige