En esta guía práctica, crearás un ángulo de cámara estático (o fijo) que usará la perspectiva del jugador en un mapa de ejemplo en tercera persona, y luego crearás un volumen de activación que hará la transición desde tu punto de vista a la nueva cámara estática cuando tu personaje se solape con el volumen. Al completar este tutorial, puedes aplicar este proceso en tu propio juego para configurar una perspectiva fija para un jugador.
Creación del actor de la cámara estática
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.
Configuración del nivel
Para demostrar la transición de perspectivas entre la cámara del jugador y el actor de la cámara estática, tendrás que configurar la escena. Para ello, puedes modificar la geometría de la malla estática en el nivel plantilla en tercera persona.
Comienza yendo al panel del esquematizador del mundo y con la tecla Mayús pulsada, selecciona Suelo y los cuatro actores de malla estática Muro en la carpeta ArenaGeometry > Arena.
En el ejemplo de la imagen de arriba, los cuatro actores de malla estática Muro se llaman Wall6, Wall7, Wall8 y Wall9.
Haz clic con la tecla Alt pulsada y arrastra el gizmo de transformación para duplicar los muros y el suelo.
El resultado será la creación de un segundo Suelo y cuatro actores de malla estática Muro adicionales.
En el ejemplo de la imagen de arriba, el suelo duplicado se denomina Floor2 y los muros duplicados son Wall10, Wall11, Wall12 y Wall13.
Mueve las mallas estáticas recién creadas para que la disposición quede como la de abajo: una nueva habitación que es una copia de la primera, pero sin contenido.
Desde el esquematizador del mundo, selecciona los dos muros que conectan ambas salas y establece que tus valores de Escala X sean 14.
En el ejemplo de la imagen de arriba, esos dos muros se llaman Wall9 y Wall12.
Selecciona los muros que conectan las habitaciones y muévelos usando el gizmo de transformación para que se forme una partición entre salas con un hueco como se ve en el GIF de abajo.
En el ejemplo de la imagen de arriba, esos dos muros se llaman Wall9 y Wall10.
Tu preparación completa del nivel debería parecerse a la imagen de abajo, con un segundo espacio conectado al primero por una abertura en la pared.
Configuración de la perspectiva de la cámara
Ahora que ya has preparado el nivel, puedes colocar el BP_ExampleCameraActor en el nivel para hacerte una idea mejor de la vista que el jugador tendrá cuando se solape con el volumen de activación. Puedes conseguir una perspectiva en primera persona a partir del punto de vista de la cámara vinculando el visor al actor de cámara y entrando en modo Pilotar.
Con la cámara seleccionada en el nivel, haz clic derecho sobre ella y en el menú contextual, selecciona Pilotar actor de cámara.
Ahora podrás mover el visor usando las teclas WASD mientras mantengas pulsado el botón izquierdo o derecho del ratón. Cuando vueles por el nivel, la posición de la cámara seguirá tu movimiento, lo que te permitirá hacerte una idea de la perspectiva que tomará la cámara mientras se juegue.
Para liberar la cámara, haz clic en botón Desbloquear.
La cámara se quedará donde está al liberarla. El icono junto al botón *Unlock* te permite cambiar entre la vista de cámara del juego y la del editor del nivel.
Pilota la cámara hasta una posición en la que mire hacia abajo en dirección a la segunda sala, como lo hace al final del GIF de abajo.
Cuando hayas acabado de configurar la escena de cámara, debería parecerse a la imagen de abajo, con una cámara estática enfocada hacia abajo mirando a la nueva habitación y la cámara original siguiendo al actor en tercera persona.
Creación del actor activador del solapamiento
En este ejemplo, el actor activador funciona como gestor de transición entre el punto de vista de la cámara del jugador y el punto de vista de la cámara estática. Cuando el jugador se solapa con los límites del volumen con componente de caja, se da una mezcla de transición entre ambas perspectivas.
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.
Resultado final
Cuando se inicia el juego, el jugador controla el movimiento del personaje con WASD. Cuando se solapa BP_BlendTriggerVolume, la vista de cámara se asigna al actor de cámara que has creado y colocado en el nivel, y la vista cambia a un plano aéreo del personaje controlado por el jugador.
Puede que te hayas percatado de que la vista es de pantalla ancha, puedes desactivarla desmarcando la opción Restringir relación de aspecto dentro del panel Detalles del actor de cámara.