Third person mit Zoom zur First person - BP und C++

  • Hallo!
    Wieder einmal ein Tutorial.
    Ich will euch zeigen wie ihr eine Thrid Person Kamera mit Zoomfunktion so hinbekommt das ihr auch in die First Person version Zoomen könnt!


    C++
    Ich fange hier mit C++ an, weil es deutlich weniger zu schreiben ist ;D


    Als erstes öffnet ihr natürlich euer Projekt in VS2013. Dann auf in die Character.h
    Dort folgenden Code hinzufügen:

    Code
    virtual void BeginPlay();
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Variables)
    float Zoom;
    FVector FpsOffset = FVector(-2.f, -7.f, 0.f);
    FVector TpsOffset = FVector(0.f, 30.f, 80.f);
    void ZoomIn();
    void ZoomOut();


    Ihr könnt die Variable Zoom, FpsOffset und TpsOffset beliebig verändern. Allerdings erhalte ich damit die schönsten Ergebnisse.


    Auf zur Character.cpp


    Zu Aller erst folgendes Hinzufügen, irgendwo ganz oben bei den vielen anderen Variablen:

    Code
    Zoom = 50.f;


    (kann verändert werden, führt aber wahrscheinlich zu bugs (z.b. den Kopf von innen sehen))


    Bei all den anderen Inputs folgende Hinzufügen:

    Code
    InputComponent->BindAction("ZoomIn", IE_Pressed, this, &AUltimateTutorialsCharacter::ZoomIn);
    InputComponent->BindAction("ZoomOut",  IE_Pressed, this, &AUltimateTutorialsCharacter::ZoomOut);


    (hier wird einfach nur die Eingabe definiert)


    Weiter unten rufen wir jetzt all unsere Voids auf.
    Fangen wir mit BeginPlay an:

    Code
    void AUltimateTutorialsCharacter::BeginPlay()
    {
        CameraBoom->AttachTo(Mesh, "fpsHead");
        CameraBoom->TargetArmLength = 0.f;
        bUseControllerRotationYaw = true;
        CameraBoom->SetRelativeLocation(FpsOffset);
    }


    (Die Kamera zu beginn in die First Person setzen)


    Jetzt ZoomOut und ZoomIn


    (hier sagt ihr dem Programm einfach nur was passieren soll wenn ihr raus/rein Zoomt und fragt ob ihr First oder Third Person seit)


    Jetzt Compilieren und.... nicht fertig.
    Starten und zu den ProjectSettings -> Input
    Hier ZoomOut und ZoomIn mit Mousewheel up bzw. Mousewheel down definieren und auf "Use as default" drücken.
    Jetzt sucht ihr euren Character, aber nicht den fertigen, sondern das Skelett. Hier sucht ihr den Kopf (Head)
    Habt ihr den Kopf gefunden, rechtsklick drauf und "create new socket". Den nennt ihr "fpsHead"


    Alles Speichern, Spielen und es müsste Funktionieren :D



    Blueprint
    Mal runter scrollen und die Bilder von Shura anschauen. Er/Sie hat den Bug gefixt ^^
    Bitte beide Posts von Shura anschauen, da der erste den Bug noch enthält, im 2. Gefixt :)

  • Verbesserungswunsch:
    Momentan setzt du deine Kamera jeden Frame, auch wenn es keine Änderungen gab.
    Setz die Kamera doch stattdessen einfach in deiner Zoomfunktion.
    Den bool brauchst du auch nicht, du kennst ja den Targetoffset und kannst den einfach mit einem Grenzwert vergleichen (MinTPSOffset oder so)


    On Tick kannst du dann z.B. den aktuellen Offset der Kamera zum Targetoffset hininterpolieren.

  • Das C++ Part ist eigentlich nicht von mir, hab ihn aber zur vollständigkeit mit aufgeschrieben. Werde mal schauen das ich die Vorschläge aber trotzdem umsetze :)


    Der Blueprint Part ist dann von mir, aber da hab ich ein Bug mit dem Socket gefunden. Nämlich das die Kamera nicht richtig attached. Wenn ich das gefixed habe kommt dann auch der Teil dazu ^^

  • Der Verbesserungsvorschlag dürfe oben im C++ Code schon drinnen sein :D Es wird jetzt überhaupt kein Tick mehr benötigt ^^


    Zum BP
    Ja sieht bei mir so ähnlich aus.
    Allerding funktionier das Attach To nicht, deshalb auch der Grund warum oben bei Blueprint nix ist.
    Ich bekomm den nicht richtig zum laufen
    Trotzdem danke für deine Bilder :)

  • Ah... ich glaub jetzt hab ich endlich mal gerafft was Du als mit dem Fehler meinst. Die Kamera passt sich nicht der Blickrichtung der Animation an, sondern verbleibt in der des Objekts.


    Aufgrund der Tatsache das der SpringArm in FP garnicht gebraucht wird, da keine Collision in dem Sinne vorkommen kann die korrigiert werden muss.
    Hab Dein BP mal einwenig verändert und es funktioniert soweit in FP. Sieht halt nur einwenig sehr .... aus beim Rückwärts laufen mit dem Bewegungsmuster aus dem ThirdPerson Template, aber die Cam ist nun fix am Skelet, Mesh oder was auch immer. (Sorry bin noch ein totales greenhorn in UE & SpieleDev)


    War das das was Du meintest ?


    Gruß Shura