In dieser Anleitung erschaffen Sie eine statische (oder feste) Kameraposition, die bei laufendem Gameplay auf einer Beispielkarte in der Verfolgerperspektive als Perspektive des Spielers dient. Außerdem erstellen Sie ein Trigger-Volumen, über das Ihre Perspektive zur neuen statischen Kamera wechselt, sobald Ihr Charakter das Volumen überlappt. Nach Abschluss des Tutorials können Sie die hier verwendete Vorgehensweise verwenden, um in Ihrem eigenen Spiel eine feste Perspektive für einen Spieler einzurichten.
Erstellen des Statische-Kamera-Actors
Begin by creating a New > Games > Third Person > C++ project named StaticCameras.
Launch the C++ Class Wizard, enable the checkbox for Show All Classes, then type CameraActor within the search field to select and create your new Camera Actor class named ExampleCameraActor.
From the C++ Class panel, right click on your ExampleCamera and from the dropdown C++ Class actions menu select Create a Blueprint class based on ExampleCameraActor. Then drag an instance of BP_ExampleCameraActor into the level.
Level-Einrichtung
Um den Wechsel zwischen den Perspektiven der Spielerkamera und dem Statische-Kamera-Actor zu demonstrieren, müssen Sie die Szene einrichten. Sie können dies erreichen, indem Sie einen Teil der Statisches-Mesh-Geometrie aus dem Level der Third-Person-Vorlage modifizieren.
Beginnen Sie, indem Sie zum Welt-Outliner-Panel navigieren und im Ordner ArenaGeometry > Arena bei gedrückter Umschalttaste die Statisches-Mesh-Actors des Bodens und der vier Wände auswählen.
Im Beispielbild oben werden die Statisches-Mesh-Actors der Wände als Wall6, Wall7, Wall8 und Wall9 aufgelistet.
Alt-klicken Sie und ziehen Sie das Transformieren-Gizmo, um eine duplizierte Einrichtung für Boden und Wände zu erstellen.
Dadurch werden ein neuer Statisches-Mesh-Actor für den Boden und vier zusätzliche Statisches-Mesh-Actors für die Wände erstellt.
Im Beispielbild oben wird der duplizierte Boden als Floor2 bezeichnet, die duplizierten Wände werden Wall10, Wall11, Wall12 und Wall13 genannt.
Ordnen Sie die duplizierten statischen Meshs an, bis sie dem Layout unten ähneln und damit einen Raum bilden, der den ersten kopiert, aber keine Inhalte enthält.
Wählen Sie im Welt-Outliner die beiden Wände, welche die zwei Räume verbinden, und stellen Sie deren X-Maßstab-Werte auf 14.
Im Beispielbild oben haben diese beiden Wände die Namen Wall9 und Wall12.
Wählen Sie die beiden verbindenden Wände und bewegen Sie sie mit dem Transformieren-Gizmo, damit diese die Räume wie unten mit aufteilen und zwischen sich eine Lücke haben.
Im Beispielbild oben haben diese beiden Wände die Namen Wall9 und Wall10.
Ihr fertiges Level sollte dem im Bild unten ähneln, mit einem zweiten Raum, der durch eine Öffnung in der Wand mit dem ersten verbunden ist.
Einrichtung der Kameraperspektiven
Nachdem Sie nun die Level-Einrichtung abgeschlossen haben, können Sie den BP_ExampleCameraActor im Level platzieren, um eine bessere Vorstellung vom Blickwinkel des Spielers zu haben, sobald dieser das Trigger-Volumen überlappt. Sie können eine First-Person-Perspektive aus Sicht der Kamera übernehmen, indem Sie den Viewport an den Kamera-Actor binden und den Pilot-Modus starten.
Wählen Sie die Kamera im Level aus, rechtsklicken Sie darauf und wählen Sie im Kontextmenü Pilot CameraActor.
Sie können sich bei gehaltener linker oder rechter Maustaste mit den WASD-Tasten durch den Viewport bewegen. Wenn Sie durch das Level fliegen, folg die Kameraposition Ihren Bewegungen, wodurch Sie sich eine Vorstellung davon machen können, welche Perspektive die Kamera bei laufendem Gameplay anzeigt.
Klicken Sie auf Unlock, um die Kamera zu entsperren.
Die Kamera bleibt an der Position, wo Sie sie entsperrt haben. Das Symbol neben der Schaltfläche zum Freischalten erlaubt Ihnen, zwischen der Kameraperspektive im Spiel und der Level-Editor-Perspektive zu wechseln.
Bringen Sie die Kamera an eine Position, von der Sie ähnlich wie im Bild unten auf den zweiten Raum hinunterblickt.
Ihre fertig eingerichtete Kamera-Szene sollte ähnlich wie das Bild unten aussehen, mit einer statischen Kamera, die auf den neuen Raum hinunterblickt und der ursprünglichen Kamera, die dem Third-Person-Actor folgt.
Erstellen des Überlappungs-Trigger-Actors
In diesem Beispiel fungiert der Trigger-Actor als Übergangsmanager zwischen dem Kamerastandpunkt des Spielers und dem statischen Kamerastandpunkt. Sobald der Spieler die Volumengrenzen seiner Box-Komponente überlappt, kommt es zu einer Übergangsmischung zwischen den Perspektiven.
Using the C++ Class Wizard, create a new Actor class named BlendTriggerVolume.
Navigate to your
BlendTriggerVolume.hfile, and declare the following code in your class definition.C++protected: //Collision Bounds of the Actor Volume UPROPERTY(EditAnywhere, BlueprintReadWrite) class UBoxComponent* OverlapVolume; //Camera Actor which the Actor Volume blends to UPROPERTY(EditAnywhere, BlueprintReadWrite) TSubclassOf<ACameraActor> CameraToFind;Next, navigate to your
BlendTriggerVolume.cppfile to set up your constructor and box component overlap methods. Declare the following include class libraries.C++`#include "Components/BoxComponent.h"` `#include "StaticCamerasCharacter.h"` `#include "Camera/CameraActor.h"` `#include "Runtime/Engine/Classes/Kismet/GameplayStatics.h"`In the constructor ABlendTriggerVolume::ABlendTriggerVolume, declare the following code.
C++ABlendTriggerVolume::ABlendTriggerVolume() { //Create box component default components OverlapVolume = CreateDefaultSubobject<UBoxComponent>(TEXT("CameraProximityVolume")); //Set the box component attachment to the root component. OverlapVolume->SetupAttachment(RootComponent); }Next, implement your
NotifyActorBeginOverlapandNotifyActorEndOverlapclass methods:C++void ABlendTriggerVolume::NotifyActorBeginOverlap(AActor* OtherActor){ //Cast check to see if overlapped Actor is Third Person Player Character if (AStaticCamerasCharacter* PlayerCharacterCheck = Cast<AStaticCamerasCharacter>(OtherActor)) { //Cast to Player Character's PlayerController if (APlayerController* PlayerCharacterController = Cast<APlayerController>(PlayerCharacterCheck->GetController())) {Compile your code.
Finished Code
BlendTriggerVolume.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "BlendTriggerVolume.generated.h"
UCLASS()
class STATICCAMERAS_API ABlendTriggerVolume : public AActor
{
GENERATED_BODY()
BlendTriggerVolume.cpp
#include "BlendTriggerVolume.h"
#include "Components/BoxComponent.h"
#include "StaticCamerasCharacter.h"
#include "Camera/CameraActor.h"
#include "Runtime/Engine/Classes/Kismet/GameplayStatics.h"
// Sets default values
ABlendTriggerVolume::ABlendTriggerVolume()
{
Setting up the Overlap Trigger Actor
Now that you have created your overlap Actor, you will need to place it into the level and set up its bounds.
Begin by navigating to your C++ Classes folder, right-click on your BlendTriggerVolume class, select Create Blueprint Class based on BlendTriggerVolume, then name your Blueprint Actor BP_BlendTriggerVolume.
From the class defaults, navigate to Camera To Find in the Details panel, open the drop down menu, then select BP_ExampleCameraActor.
Optionally, you can change the default blend time for this Blueprint without having to go back into the source code, or affecting other Blueprints with the same inherited parent class.
Compile and Save.
From the Content Browser, drag an instance of BP_BlendTriggerVolume into the level.
Move the BP_BlendTriggerVolume into the room with your BP_ExampleCameraActor, and from the Details panel select the box component. Navigate to the Shape category and modify the Box Extent X, Y, and Z values so the volume will fit your room.
From the Main Editor View, click the Play button to play in the Editor.
Endergebnis
Wenn das Spiel startet, steuert der Spieler die Bewegung seines Charakters mit WASD. Sobald BP_BlendTriggerVolume überlappt wird, wird die Kameraperspektive an den Kamera-Actor übergeben, den Sie erstellt und in Ihrem Level platziert haben, wodurch die Ansicht zu einer Vogelperspektive des vom Spieler kontrollierten Charakter wechselt.
Sie haben vermutlich bemerkt, dass die Ansicht im Breitbild angezeigt wird. Sie können dies ändern, indem Sie die Constrain Aspect Ratio-Option im Details-Panel des Kamera-Actors deaktivieren.