Dans ce document, nous vous expliquons comment configurer un acteur d'éclairage qui change de couleur et s'éteint progressivement au contact.
Pour ce faire, vous utiliserez un composant de point lumineux contenant un composant de boîte qui servira de déclencheur de chevauchement, ainsi qu'un composant de chronologie qui manipulera l'acteur de point lumineux.
Créer l'acteur de lumière déclinante
Créez le nouveau projet C++ basé sur un modèle vide et nommez-le FadingLights.
Accédez au navigateur de contenu, cliquez sur dossier Classes_C++, puis cliquez sur le bouton Ajouter (+) et sélectionnez Nouvelle classe C++.
Sélectionnez Acteur comme classe parente.
Nommez l'acteur créé LightActor.
Une fois le nouvel acteur créé, Visual Studio ouvre automatiquement les fichiers
LightActor.hetLightActor.cpp. Accédez au fichierLightActor.het déclarez ce qui suit :LightActor.h
C++#include "Components/TimelineComponent.h"Ensuite, dans la définition de classe
LightActor, ajoutez le code suivant :LightActor.h
C++public: UPROPERTY(EditAnywhere) UCurveFloat* PointLightFloatCurve; UPROPERTY(EditAnywhere) UCurveLinearColor* PointLightColorCurve; protected:Accédez à
LightActor.cppet ajoutez les bibliothèques de classe suivantes.LightActor.cpp
C++#include "Components/BoxComponent.h" #include "Components/PointLightComponent.h"Dans le constructeur de
ALightActor::ALightActor, déclarez le code suivant :LightActor.cpp
C++ALightActor::ALightActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; //Create our Default Components PointLightComp = CreateDefaultSubobject<UPointLightComponent>(TEXT("PointLightComp")); LightTimelineComp = CreateDefaultSubobject<UTimelineComponent>(TEXT("LightTimelineComp")); LightOverlapVolume = CreateDefaultSubobject<UBoxComponent>(TEXT("LightOverlapVolume"));Implémentez les méthodes
UFunctiondu composant Point lumineux :LightActor.cpp
C++void ALightActor::UpdateLightBrightness(float BrightnessOutput) { PointLightComp->SetLightBrightness(BrightnessOutput * 20.0f); } void ALightActor::UpdateLightColor(FLinearColor ColorOutput) { PointLightComp->SetLightColor(ColorOutput); }Ensuite, dans la méthode
BeginPlay, ajoutez le code suivant :LightActor.cpp
C++void ALightActor::BeginPlay() { Super::BeginPlay(); //Binding our float and color track to their respective functions UpdateBrightnessTrack.BindDynamic(this, &ALightActor::UpdateLightBrightness); UpdateColorTrack.BindDynamic(this, &ALightActor::UpdateLightColor); //If we have a float curve, bind it's graph to our update function if (PointLightFloatCurve)Compilez votre code.
Dans le navigateur de contenu, accédez au dossier Classes_C++.
Faites un clic droit sur LightActor, sélectionnez Créer la classe de blueprint basée sur l'acteur d'éclairage et nommez l'acteur de blueprint BP_LightActor.
Les paramètres de classe par défaut de BP_LightActor s'affichent de la façon suivante :
Code en cours de réalisation
LightActor.h
//Copyright 1998-2022 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Components/TimelineComponent.h"
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "LightActor.generated.h"
UCLASS()
class FADINGLIGHTS_API ALightActor : public AActor
LightActor.cpp
//Copyright 1998-2022 Epic Games, Inc. All Rights Reserved.
#include "LightActor.h"
#include "Components/BoxComponent.h"
#include "Components/PointLightComponent.h"
// Sets default values
ALightActor::ALightActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
Créer et lier l'événement de chevauchement de collision
Le composant de boîte doit pouvoir déclencher le composant de chronologie lorsqu'un acteur entre dans ses limites de collision.
Accédez à la définition de classe du fichier
LightActor.h+ et déclarez le fichier suivant sousBrightnessMultiplier:LightActor.h
C++protected: UFUNCTION() void OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);Ensuite, accédez au fichier
LightActor.cppet implémentez la fonctionOnOverlapBegin.LightActor.cpp
C++void ALightActor::OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) { LightTimelineComp->Play(); }Associez la fonction de chevauchement dans la méthode
BeginPlay:LightActor.cpp
C++//Binding our Box Component to our Light Actor's Overlap Function LightOverlapVolume->OnComponentBeginOverlap.AddDynamic(this, &ALightActor::OnOverlapBegin);Compilez votre code.
Code final
LightActor.h
//Copyright 1998-2022 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Components/TimelineComponent.h"
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "LightActor.generated.h"
UCLASS()
class FADINGLIGHTS_API ALightActor : public AActor
LightActor.cpp
//Copyright 1998-2022 Epic Games, Inc. All Rights Reserved.
// Fill out your copyright notice in the Description page of Project Settings.
#include "LightActor.h"
#include "Components/BoxComponent.h"
#include "Components/PointLightComponent.h"
// Sets default values
ALightActor::ALightActor()
Configurer la piste de luminosité
Lorsque le joueur chevauche les limites du composant de boîte de l'acteur d'éclairage, le composant de chronologie nécessite une courbe de virgule flottante pour manipuler la valeur de luminosité du composant Point lumineux.
La valeur initiale de la luminosité est de 5 000, puis diminue jusqu'à 0 par intervalles de 5 secondes.
Accédez au navigateur de contenu, puis sélectionnez Ajouter (+) > Divers > Courbe.
Sélectionnez CurveFloat et nommez la ressource BrightnessCurveFloat.
Double-cliquez sur BrightnessCurveFloat pour ouvrir l'éditeur de chronologie.
Ajoutez deux clés à la courbe de float en faisant un clic droit sur le graphique, puis sélectionnez Ajouter une clé. Définissez la valeur-temps de la première clé sur (0, 5000). Définissez la valeur-temps de la deuxième clé sur (5, 0). Votre BrightnessCurveFloat doit ressembler à ceci :
Enregistrez BrightnessCurveFloat, puis revenez au navigateur de contenu et double-cliquez sur BP_LightActor pour ouvrir la fenêtre Valeurs de classe par défaut.
Accédez au panneau Détails et sélectionnez Float de la courbe de luminosité dans le menu déroulant Courbe de virgule flottante du point lumineux.
Cliquez sur les boutons Compiler et Enregistrer.
Configurer la piste de couleur
Lorsque le joueur chevauche les limites du composant de boîte de l'acteur d'éclairage, la chronologie du point lumineux nécessite une piste de courbe de couleur linéaire pour manipuler la propriété de couleur du composant Point lumineux.
Accédez au navigateur de contenu, puis sélectionnez Ajouter (+) > Divers > Courbe.
Sélectionnez CurveLinearColor et nommez la ressource LinearColorCurve.
Double-cliquez sur LinearColorCurve pour ouvrir l'éditeur de chronologie.
Double-cliquez sur la première clé de couleur pour la modifier, puis définissez la valeur RVB sur : (R :1, V :0,665, B :0,015).
Double-cliquez sur la deuxième clé de couleur pour la modifier. Définissez la valeur RVB sur : (R :0, V :0, B :0).
Sélectionnez le deuxième point sur le graphique en cliquant dessus et définissez la durée sur 5 secondes.
Votre LinearColorCurve doit ressembler à ceci :
Enregistrez LinearColorCurve, puis revenez au navigateur de contenu et double-cliquez sur BP_LightActor pour ouvrir ses valeurs de classe par défaut.
Accédez au panneau Détails et sélectionnez Float de la courbe de luminosité dans le menu déroulant Courbe de virgule flottante du point lumineux.
Cliquez sur les boutons Compiler et Enregistrer.
Configuration du niveau
Pour mieux illustrer la fonctionnalité du code que vous avez écrit, vous devez supprimer tous les acteurs de sources lumineuses du niveau.
Dans le navigateur de contenu, accédez à la ressource BP_LightActor, sélectionnez-la et faites-la glisser dans le niveau.
Sélectionnez BP_LightActor dans l'organiseur du monde, accédez au panneau Détails et définissez les paramètres Emplacement sur (0, 0, 300) et Échelle sur (10, 10, 10).
Supprimez l'acteur DirectionalLight dans l'organiseur du monde.
Le niveau doit ressembler à ce qui suit.
Résultat final
Maintenant que vous avez configuré l'acteur d'éclairage et le niveau, cliquez sur Lecture (PIE) pour prendre automatiquement possession du pion spectateur.
Vous pouvez contrôler le pion spectateur et naviguer dans les limites du composant de boîte de l'acteur.
Une fois la fonction Jouer du composant de chronologie déclenchée, la couleur et la luminosité de la lumière doivent commencer à changer par intervalles de 5 secondes.