commutation de la caméra

 

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);
    }

}


 

 

 

Publié 673 articles originaux · louange gagné 18 · vues 280 000 +

Je suppose que tu aimes

Origine blog.csdn.net/directx3d_beginner/article/details/105134664
conseillé
Classement