Camera Rotation einschränken

  • Hallo Leute!

    Es ist wirklich zum Mäusemelken bei mir, und zwar geht es um die Camera (First Person), die soll in der Rotation eingeschränkt werden, was aber NUR über "Add Controller Yaw Input" laufen darf. Alles andere funktioniert nicht und habe ich schon x mal ausprobiert.


    Alles läuft perfekt, genau so wie ich es brauche, nur bei dem zweiten Branch ist das "False" Fehlerhaft.

    Im Grunde soll dort einfach nur die Kamera wieder zurück schwenken können.


    Das bedeutet die Kamera kann man Horizontal (Yaw) nach max links -75 und max rechts 75 schwenken, aber dann bleibt die Kamera leider hängen, eben weil es dann ja false ist. Aber egal was ich bei False drann hänge, ob >= -75 (oder -76 usw.) ich komme ständig in den Teufelskreis das ich zwei Ergebnise brauche, weil ein Branch immer 2 Wege hat. Oder gibt es auch einen Branch mit nur einem weg? So das false, nicht existiert? Also das false nicht nicht existiert?


    Also:
    Wenn Min kleiner als -75 ist, soll die Camera Richtung -74 schwenkbar sein (weil kleiner).

    Wenn Max größer als 75 ist, soll die Kamera Richtung 74 schwenkbar sein (weil größer).

    Wie macht man das?


    Danke


  • soll in der Rotation eingeschränkt werden, was aber NUR über "Add Controller Yaw Input" laufen darf. Alles andere funktioniert nicht und habe ich schon x mal ausprobiert.

    Dann muss aber bei dir irgendwas falsch gewesen sein? Ich meine ich kenne dein Setup nicht, aber das Setup hat bei mir sofort funktioniert.



    Und wenn du das wirklich über den Yaw Input machen musst, dann sollte das funktionieren:



    Hat es bei mir jedenfalls.

  • Vielen Dank freezernick


    Das obere funktioniert gar nicht, weil daran hatte ich auch schon gedacht.

    Nur das untere funktioniert bei mir.


    Habe da eine spezial Bewegung eingebaut und die funktioniert nur mit dem AddControllerYawInput.


    Aber das mit dem > 0.0 verstehe ich nicht. (von der Logik her)


    Warum muss das sein?

    Nach links schauen = minus Bereich

    Nach rechts = plus bereich aber wieso das noch mal so branchen?

  • Eigentlich war der Gedanke mit dem InRange gar nicht schlecht, deshalb hatte ich das auch erst empfohlen bevor ich selbst getestet hatte. Ich denke das Problem dabei war, dass das AddYawInput keinen absoluten Maximalwert von -75 bis 75 hat (ich weiß auch nicht, ob man das irgendwo festlegen kann, außer irgendwie manuell). So konnte es passieren (war bei mir so), dass die Werte teilweise dann -75,002 oder ähnliches waren. So war dann InRange false und man konnte sich in keine Richtung bewegen. Wenn der Wert -75 gewesen wäre, dann wäre das InRange ja true gewesen und du hättest AddYawInput aufgerufen, obwohl du gar nicht wusstest, in welche Richtung sich der Spieler gedreht hätte. So hätten wieder Werte von < -75 und > 75 enstehen können.


    Ich hoffe das war verständlich genug ^^ Sonst probiere ich es nochmal

  • Vielen Dank noch mal :)


    Es ist so das der Kopf sich entsprechend bis zu -75 und 75 dreht/schwenkt.


    Das obere Beispiel war für die FirstPersonCamera.

    Jetzt bräuchte ich noch eine einfache Lösung für die ThirdPersonCamera. Denn dort dreht der Kopf auch bis max -75 und 75, die Camera dreht aber weiter.


    Schaue ich mit der ThirdPersonCamera immer nach links, komme ich irgendwann automatisch bei rechts herum (75) wieder an und dann springt der Kopf der zuvor nach links geschaut hat, sofort nach rechts.


    Wie kann man dieses Kopf springen langsamer machen?

    • Offizieller Beitrag

    Dein von der Logik.

    Was soll den Passieren wenn die Kamera 75 oder -75 erreicht hat ?


    Nach meinem Verständnis ist der Wert gleich oder größer als 75 dann setze die Z Rotation auf 75 oder ?

    Somit könnte die Rotation niemals größer als 75 sein und das selbe auch mit dem Minus Bereich.

    Schaue ich mit der ThirdPersonCamera immer nach links, komme ich irgendwann automatisch bei rechts herum (75) wieder an und dann springt der Kopf der zuvor nach links geschaut hat, sofort nach rechts.

    Ist den Gerade ausschauen = 0 ? Wenn dein Mesh schon nicht gerade steht und es schon gedreht ist, wird das mit dem + und Minus rechnen schon schwierig. Mal angenommen dein Mesh wäre um 90 Grad gedreht, dann wäre + 75 Grad = + 165 Grad und - 75 Grad ? = immer noch +15 Grad.

    Hier + und minus zu trennen ist sicherlich von Vorteil.

  • DeltaTime = 1 Sekunde / Anzahl an Calls, also 1 / 40 = 0.025

    InterpSpeed ist einfach der Wert, der für dich gut aussieht. Ich hatte erst 10 drin, das war zu schnell, 1 ist wiederum sehr langsam.


    EDIT: Eigentlich hatte ich VInterpTo vorgeschlagen, da ich zu dem Zeitpunkt noch mit dem ForwardVector der Objekte getestet hatte. Das geht aber auch über die Rotation mit RInterpTo, falls du es noch nicht gesehen haben solltest.

  • Der VInterpTo ist besser, der muss aber wenn man z.B. RotatorZ vorher normalizied werden, sonst bugt das.


    Der RInterpTo funktioniert bei mir nicht so gut.



    Wegen DeltaTime, da ich das ganze Script mit der Kopfbewegung bereits auf 40 Wiederholungen pro Sekunde limitiert habe, brauche ich dann überhaupt noch die DeltaTime oder ist das ne andere Geschichte?


    InterpSpeed hatte ich auch schon 1-100 drinnen gehabt und da ändert sich nichts.



    So habe ich das für die horizontale Bewegung gemacht, bei der vertikalen gibt es leider noch Probleme.

    Im Grunde soll der Kopf eben bis min max (links, rechts) bewegbar sein, danach soll der in die Mitte wandern und erst danach wieder zur Gegenseite, wenn man mit der Kamera in der Kreisrunde fertig gedreht hat.

    Und das soll eben auch für das hoch und runter schauen gelten, nur eben nicht invertiert.


    Also schaue ich nach maximal links oben, soll der Kopf dann auch bei dem überdrehen nach oben gerichtet in die Mitte wandern und dann zur Gegenseite gehen.

    Sozusagen: TargetY = -40 (für hoch) und unten TargetY = 30 (für runter), während man maximal -75 nach links und 75 nach rechts schauen kann.

    Die 170 sind dafür da, weil die Rotation maximal 180 - und + ist (bis -180 und dann bis +180 = 360).

    Der tote Winkel für TargetZ = 0 und dieser ist ab -170 bis +170. Also 20 Einheiten im Nacken sind der tote Winkel. Das funktioniert auch perfekt.


    Das gleiche System hatte ich für oben und eben getrennt mit Sequence für jede Kopfrichtung.