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:
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:
(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:
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:
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
void AUltimateTutorialsCharacter::ZoomIn()
{
if (CameraBoom->TargetArmLength > 50.f)
{
CameraBoom->TargetArmLength -= Zoom;
CameraBoom->AttachTo(RootComponent);
CameraBoom->SetRelativeLocation(TpsOffset);
bUseControllerRotationYaw = false;
}
else
{
CameraBoom->AttachTo(Mesh, "fpsHead");
CameraBoom->TargetArmLength = 0.f;
bUseControllerRotationYaw = true;
CameraBoom->SetRelativeLocation(FpsOffset);
}
}
void AUltimateTutorialsCharacter::ZoomOut()
{
if (CameraBoom->TargetArmLength < 300.f)
{
CameraBoom->TargetArmLength += Zoom;
CameraBoom->AttachTo(RootComponent);
CameraBoom->SetRelativeLocation(TpsOffset);
bUseControllerRotationYaw = false;
}
}
Alles anzeigen
(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
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