[Neuling] Roll a Ball Extended Version - Lektion 4 - Bewegung der Kamera

  • Willkommen bei "[Neuling] Roll a Ball Extended Version - Lektion 4 - Bewegung der Kamera" 8)

    Diese Lektion setzt Lektion 3 dieser Reihe voraus und baut entsprechend darauf auf.


    Nun wollen wir das Kamera Objekt entsprechend verändern.
    Wählt hierzu die "Main Camera" aus und ändert die folgenden Werte in der Transform Komponente:


    Anschließend zieht das Kamera-Objekt in der Hierarchy auf den Spieler, sodass es ein Kind-Objekt des Spielers ist:

    Die Kamera bewegt sich nun mit dem Spieler.

    Mit dem Play-Mode kann dies getestet werden. Doch ... nun rotiert die Kamera im Play-Mode auf eine sehr seltsame Weise mit dem Spieler.

    Das liegt daran, dass alle Koordinaten vom Spieler Objekt übernommen werden. Dies wollen wir so aber nicht, also müssen wir es entsprechend mit einem C# Skript unterbinden.


    Wählt nochmals die "Main Camera" aus und erstellt als neue Komponente für die Kamera ein C# Skript mit dem Namen "ControllerCamera".


    Schiebt nun wie beim Player Skript das soeben erzeugte Skript in den Scripts Ordner des Project Fensters.

    Es befinden sich nun 2 Skripte in diesem Ordner. Wählt das soeben erzeugte Skript aus und öffnet es.


    Ergänzt nun den Code um folgendes, sodass er wie dieser aussieht:


    Mittels der "public GameObject player;" Zeile stellen wir erneut Unity ein Feld zur Verfügung, in dem ein "Spiel Objekt" wie z.B. unser Player Objekt reingezogen werden kann. (Mehr dazu später).

    Der Offset als Vector 3 wird entsprechend der Grafik berechnet:

    Wir nehmen die Transformation der Kamera und subtrahieren diese mit der Transformation mit dem Spieler.


    Ergänzt nun folgendes in der "void Start()" Methode:

    Csharp
    1. offset = transform.position - player.transform.position;

    Und folgendes in der "void Update()" Methode:

    Csharp
    1. transform.position = player.transform.position + offset;


    Wir berechnen mit ersterem das Offset gemäß der oben erwähnten Regel.
    Bei dem Zweiten Code übergeben wir der Kamera Position die des Spielers + den Offset (also den Abstand) zwischen beiden.


    Unsere void Update() Methode ist jedoch nicht ganz der richtige Ort für eine solche Operation mit der Kamera.

    Es wäre im Prinzip zwar nicht falsch, aber da es sich hierbei um das "Rendern" also das anzeigen der Frames auf dem Bildschirm handelt, wird dies als letztes ausgeführt, hinter jeder Programmlogik.


    Hierfür steht von Unity die Methode "void LateUpdate()" zur Verfügung. Diese unterscheidet sich sofern, dass sie nicht vor jedem Frame aufgerufen wird, wie in void Update(), sondern erst nachdem jeder Programm Code des Scriptes fertig berechnet wurde, aufgerufen wird.

    Ändert demnach den Code so, dass er so aussieht wie hier:


    Speichert das Skript ab und kehrt in den Unity Editor zurück.

    Wählt das Kamera Objekt an und zieht im Hierarchy Fenster die Kamera aus dem Player Objekt wieder heraus.

    Die Kamera muss nun nicht länger ein Kind-Objekt vom Player sein.

    Aber wie weiß Unity nun, wer der Spieler / Player ist, bzw. das Objekt, welches er folgen soll.

    Wählt hierzu die Kamera erneut an und schaut euch die Skript Komponente an.


    Zieht nun vom Hierarchy Fenster das Player Objekt in den freien Platz des "Player" Slots in der Skript Komponente.


    Speichert nun das Projekt ab und testet es erneut im Play-Mode.

    Nun sollte euch die Kamera bei der Player Bewegung exakt so folgen, wie es gewollt ist.



    Weiter geht es in: "[Neuling] Roll a Ball Extended Version - Lektion 5 - Gestaltung des Spielfeldes"

    :s_info: Ehemalig in dieser Community als Toothless bekannt, habe ich nun meinen Künstlernamen angenommen: Cryptogene

    So manch einer kennt ja ohnehin schon meine 3D Szenen.


    ninja_pointright Ihr wollt euch für das Forum bedanken und dieses zu 100% unterstützen? Ihr könnt uns finanziell durch eine Schenkung unterstützen. Danke für euren Support!