commutation de la caméra est également un contenu important,
Ces deux caméras provenant de différentes sources, faites glisser la caméra pour diriger une scène, un cube est d'abord le faire glisser sur la scène, ainsi que d'un ensemble caméra. Ce dernier doit être attaché à un objet, tels que les feux, etc.
caméras d'origine naturelle ont cameraDirector, gérer, un immédiatement commuté, une transition en douceur est
Sont ourPlayerController-> SetViewTarget (_cameraOne);
ourPlayerController-> SetViewTargetWithBlend (_cameraTwo, _smoothBlendTime);
Mettez ensuite la scène de glisser de la classe de la caméra, la chose étrange est cameraDirector devenir cameraDirector1, mais inoffensif. Ensuite, mettre deux caméras associées des variables membres sur la scène de deux caméras ok.
Notez que playerController local est 0
// Trouver la manipulation des acteurs locaux contrôlent l'acteur
APlayerController * ourPlayerController = UGameplayStatics :: GetPlayerController (le présent, 0);
UE4 position de rédacteur en chef est
GamePlayActors-> joueur de démarrage> Note -> recevoir automatiquement l'entrée, vous trouverez et désactiver différents lecteur
Profondément dans le code, j'ai trouvé un processus de recherche exhaustive
classe APlayerController * UGameplayStatics :: GetPlayerController (const UObject * WorldContextObject, int32 PlayerIndex)
{
if (UWorld * Monde = GEngine-> GetWorldFromContextObject (WorldContextObject, EGetWorldErrorMode :: LogAndReturnNull))
{
uint32 Index = 0;
pour (FConstPlayerControllerIterator Iterator = World-> GetPlayerControllerIterator (); Iterator; ++ Iterator)
{
APlayerController * PlayerController = Iterator-> get ();
if (index == PlayerIndex)
{
retour PlayerController;
}
Index ++;
}
}
Retourner nullptr;
}
Enfin,
Une partie du code sur le document non satisfaisant, en particulier avec ce qui suit:
En-tête:
// Remplissez votre notice de copyright dans la page Description des paramètres du projet.
#pragma fois
#include "CoreMinimal.h"
#include "GameFramework / Actor.h"
#include "cameraDirector.generated.h"
UCLASS ()
classe QUICKSTART_API AcameraDirector: AActor publique
{
GENERATED_BODY ()
public:
// Définit les valeurs par défaut pour les propriétés de cet acteur
AcameraDirector ();
protégé:
// Appelé quand le jeu commence ou lorsque engendré
override BeginPlay () vide virtuel;
public:
// Appelé chaque image
virtual void Tick (float DeltaTime) override;
publique:
UPROPERTY (EditAnywhere)
AActor * _cameraOne;
UPROPERTY (EditAnywhere)
AActor * _cameraTwo;
// appareil de commutation de temps compte
un _timeToNextCameraChange à flotteur;
// temps de séjour de l' appareil d'
un _timeBetweenCameraChanges à flotteur;
// lisse temps de transition
_smoothBlendTime à flotteur;
};
Fichier de mise en œuvre
// Remplissez votre notice de copyright dans la page Description des paramètres du projet.
#include "cameraDirector.h"
#include "Kismet / GameplayStatics.h"
// Définit les valeurs par défaut
AcameraDirector :: AcameraDirector ()
{
// Définir cet acteur pour appeler Tick () chaque image. Vous pouvez désactiver cette option pour améliorer les performances si vous n'avez pas besoin.
PrimaryActorTick.bCanEverTick = true;
_timeToNextCameraChange = 1,0;
// caméra temps de séjour
_timeBetweenCameraChanges = 2.0f;
// temps de transition en douceur
_smoothBlendTime = 0.75f;
}
// Appelé lorsque le jeu commence ou quand donné naissance à
BeginPlay () AcameraDirector vide ::
{
super :: BeginPlay ();
}
// Appelé chaque image
AcameraDirector vide :: Tick (deltaTime de flotteur)
{
super :: Tick (deltaTime);
// valeur de décrément par trame, ou si elle est supérieure à 0, le processus retourne
_timeToNextCameraChange - = deltaTime;
IF (_timeToNextCameraChange> 0.0f)
{
retour;
}
// si moins de 0, ajoutez une valeur, la caméra convertit
_timeToNextCameraChange + = _timeBetweenCameraChanges;
// processus de recherche le contrôle du joueur local l'acteur
, APlayerController UGameplayStatics :: = * ourPlayerController GetPlayerController (la présente, 0)
IF (ourPlayerController == NULL)
{
retour;
}
AActor currentActor * = ourPlayerController-> GetViewTarget ();
// Sinon, l'appareil photo 1 et la caméra 1 n'est pas vide, puis passer immédiatement à la caméra 1
IF ((currentActor = _cameraOne) && (cameraOne _ = NULL) !!)
{
OurPlayerController-> SetViewTarget (_cameraOne);
}
// sinon appareil photo 2 et appareil photo 2 n'est pas vide, puis passer immédiatement à l'appareil photo 2
else if ((currentActor = _cameraTwo) && (_cameraTwo = NULL) !!)
{
ourPlayerController-> SetViewTargetWithBlend (_cameraTwo, _smoothBlendTime);
}
}