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

21.06.2016, 12:04

Unity Kamera muss bei Neigung immer noch den Spieler fokussieren

Hallo,
ich habe in Unity eine Gamepad Steuerung, bewege mich über den linken Joystick und rotiere die Figur über den rechten Joystick. Die Kamera ist dabei das Kindobjekt des Spielers, bewegt sich also beim Rotieren immer mit. Das horizontale Rotieren ist auch richtig, nur habe ich das vertikale Rotieren eingebaut und das ist nicht das Verhalten, wie man es aus den bekannten Spielen kennt. Die Kamera wird in meinem Skript einfach in einem Winkel hoch oder runter geneigt, sobald ich den rechten Joystick hoch oder runter ziehe.

Das ganze sieht dann so aus:

Video

Die Kamera lässt sich neigen, verliert aber den Fokus des Spielers, beziehungsweise besitzt ihn noch gar nicht.
Was ich erreichen will ist, dass die Kamera den Spieler immer noch fokussiert während sie hoch oder runter wandert. Dabei müsste sie ja eine kurvenförmige Bahn hoch und runter laufen.

Weiß jemand wie sowas umgesetzt werden kann? Es geht ja "nur" um die Neigung der Kamera auf der y-Achse.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

21.06.2016, 12:17

Bei der horizontalen Rotation rotierst Du korrekt um die Spielfigur. Bei der vertikalen rotierst Du aber um die Kamera-Achse und das ist verkehrt. Du musst da ebenfalls um die Achse der Spielfigur rotieren.
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]

Renegade

Alter Hase

Beiträge: 494

Wohnort: Berlin

Beruf: Certified Unity Developer

  • Private Nachricht senden

3

21.06.2016, 13:13

Die Methode Slerp aus Vector3 kann dir hier weiter helfen: Vector3.Slerp
Desweiteren könnte dir auch die Methode LookAt aus Transfrom etwas bringen: Transform.LookAt

Wie immer führen viele Wege nach Rom :)
Liebe Grüße,
René

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

21.06.2016, 15:05

Ich würde empfehlen, innerhalb des Spielers ein GameObject anzulegen (an dem Punkt, der fokussiert werden soll), in dem wiederum die Kamera ablegst. Rotierst du nun den Container, dreht sich dadurch die Kamera um den fokussierten Punkte.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

5

21.06.2016, 18:08

Hi,
Danke für die Antworten. Ich bin vorhin leider erst einmal nur dazu gekommen Cobolds und Renegades Vorschläge umzusetzen. Cobolds Vorschlag ist mit einem Einzeiler umgesetzt, funktioniert auch genau so wie ichs haben will, hat aber das Problem das dann die Figur logischerweise umgedreht wird und das darf ja nicht passieren.

Zu Renegades Vorschlag habe ich eine Frage, momentan steuer ich die Kamera noch mit diesem Skript

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Kamera des Spielers
    public Transform kamera;

    // maximale Kameradrehung vertikal
    public float maxKameradrehungVertikal = 30.0f;

    // minimale Kameradrehung vertikal
    public float minKameradrehungVertikal = -30.0f;

    // aktuelle Kameradrehung vertikal
    private float aktuelleKameraDrehungVertikal = 0;

 // Kamera vertikal rotieren
        aktuelleKameraDrehungVertikal = Mathf.Clamp(aktuelleKameraDrehungVertikal + rotationsVektor.y * rotationsGeschwindigkeitVertikal, minKameradrehungVertikal, maxKameradrehungVertikal);
        kamera.localRotation = Quaternion.identity;
        kamera.Rotate(Vector3.left, aktuelleKameraDrehungVertikal);


Die Doku zu Slerp habe ich mir angeschaut, welchen höchsten und tiefsten Punkt nehmen ich? Momentan habe ich ja nur einen Winkel wie weit sich die Kamera neigen darf, nicht aber einen festen Punkt unter und über der Figur.

Kann mir das noch jemand verraten?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

21.06.2016, 18:24

funktioniert auch genau so wie ichs haben will, hat aber das Problem das dann die Figur logischerweise umgedreht wird und das darf ja nicht passieren.
Was, wieso wird die Figur umgedreht? Du sollst doch nur die Kamera um die Achse des Spielers rotieren, nicht den Spieler selbst.
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]

Garzec

Alter Hase

  • »Garzec« ist der Autor dieses Themas

Beiträge: 693

Wohnort: Gießen

  • Private Nachricht senden

7

21.06.2016, 19:33

Und wie gelange ich an die Achse des Spielers =?

So wie mein oben gezeigtes Skript hab ichs grade, die Kamera ist Kindobjekt des Spielers und ist halt noch auf der y-Achse falsch. Aber wie ändere ich die vertikale Rotation das ich mich an der Achse des Spielers ausrichte?

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

8

22.06.2016, 09:46

Ich würde immernoch meinen Vorschlag empfehlen. ;)
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

9

22.06.2016, 09:53

Was effektiv eine technische Umsetzung von meinem Hinweis sein könnte ;)
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]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

10

22.06.2016, 09:55

Ich wollte auch nichts gegenteiliges behaupten, soll heißen: ja, nur dass man es nicht per eigenem Code umsetzt. Er hatte nur meinen Beitrag, nach seiner eigenen Aussage, noch nicht weiter berücksichtigt.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige