Neste tutorial, você criará um ângulo de câmera estática (ou fixa) usado como a perspectiva do jogador durante a jogabilidade em um mapa de exemplo em terceira pessoa. Em seguida, você criará um volume de disparador que fará a transição da perspectiva para a nova câmera estática assim que o personagem se sobrepõe ao volume. Quando concluir este tutorial, você pode aplicar no jogo o processo usado aqui para configurar uma perspectiva fixa de um jogador.
Como criar o ator de câmera 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.
Configuração do nível
Para demonstrar a transição de perspectivas entre a câmera do jogador e o ator de câmera estática, será preciso configurar a cena. Para isso, modifique algumas geometrias da malha estática no nível de modelo em terceira pessoa.
Primeiro, vá para o painel Organizador de Mundo, pressione Shift e selecione Piso e os quatro atores de malha estática Parede na pasta ArenaGeometry > Arena.
Na imagem de exemplo acima, os quatro atores de malha estática Wall estão listados como Wall6, Wall7, Wall8 e Wall9.
Clique pressionando Alt e arraste o dispositivo de transformação para criar uma estrutura duplicada de chão e parede.
Isso criará um segundo Piso e quatro outros atores de malha estática Parede.
Na imagem de exemplo acima, o chão duplicado é denominado Floor2 e as paredes duplicadas são chamadas de Wall10, Wall11, Wall12 e Wall13.
Mova as malha estáticas duplicadas seguindo o layout abaixo: um novo cômodo duplicando o primeiro, mas vazio.
No Organizador de Mundo, selecione as duas paredes que conectam os dois cômodos e defina os valores de X em Escala para 14.
Na imagem de exemplo acima, as duas paredes são denominadas Wall9 e Wall12.
Selecione as paredes de conexão e movimente-as usando o dispositivo de transformação até formarem uma separação aberta entre os cômodos, como ilustrado no gif abaixo.
Na imagem de exemplo acima, as duas paredes são denominadas Wall9 e Wall10.
A configuração final do nível deve estar semelhante à imagem abaixo, com os dois cômodos conectados entre si por uma abertura na parede.
Configuração da perspectiva da câmera
Agora que terminou de configurar o nível, posicione o BP_ExampleCameraActor no nível para entender melhor como será a perspectiva do jogador quando ele se sobrepor ao volume de disparador. Você pode obter uma perspectiva em primeira pessoa do ponto de vista da câmera fixando a janela de visualização no ator de câmera e entrando no modo Piloto.
Com a câmera selecionada no nível, clique com o botão direito nela. No menu de contexto, selecione o Pilot CameraActor.
Agora você pode percorrer a janela de visualização usando as teclas WASD enquanto mantém pressionado o botão esquerdo ou direito do mouse. Ao navegar pelo nível, a posição da câmera acompanhará seus movimentos. Dessa forma, você tem uma noção de como será a perspectiva da câmera durante a jogabilidade.
Para destravar a câmera, clique no botão Desbloquear.
Quando desbloqueada, a câmera permanecerá na posição em que estava. O ícone ao lado do botão "Unlock" permite alternar entre a perspectiva da câmera no jogo ou a perspectiva do editor no nível.
No segundo cômodo, direcione a câmera em uma posição olhando para baixo, como no gif abaixo.
A configuração final da cena da câmera deve ser semelhante à imagem abaixo, com uma câmera estática virada para baixo no segundo cômodo e a câmera original seguindo o ator em terceira pessoa.
Como criar o ator de gatilho de sobreposição
Neste exemplo, o ator de gatilho atua como o gerenciador de transição entre a perspectiva de câmera do jogador e a perspectiva da câmera estática. Quando o jogador se sobrepor aos limites de volume do componente de caixa, ocorrerá uma mesclagem de transição entre as 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
Quando o jogo iniciar, o jogador controla os movimentos do personagem com WASD. Quando ocorre a sobreposição com o BP_BlendTriggerVolume, a perspectiva da câmera é atribuída ao ator de câmera criado e adicionado no nível, e o ponto de vista mudará para uma tomada aérea do personagem controlado pelo jogador.
Você deve ter percebido que a exibição é panorâmica. Se quiser, pode desabilitá-la ao desmarcar a opção "Taxa de proporção restringida" dentro do painel Detalhes do ator de câmera.