In diesem Dokument wird beschrieben, wie ein Licht-Actor eingerichtet wird, der bei Kontakt seine Farbe ändert und langsam verschwindet.
Dies geschieht mit einer Point Light Component, die eine Box-Komponente enthält, die als Überlappungsauslöser dient, und eine Timeline-Komponente zum Bearbeiten des Point Light Actors.
Erstellen des Fading Light-Actors
Erstellen Sie das neue C++-Projekt basierend auf der Vorlage Leer, benennen Sie es FadingLights.
Navigieren Sie zum Inhaltsbrowser, klicken Sie auf C++-Klassen und klicken Sie dann auf Hinzufügen (+) und wählen Sie Neue C++-Klasse.
Wählen Sie Actor als eine übergeordnete Klasse.
Benennen Sie den erstellten Actor Lichtactor.
Wenn ein neuer Actor erstellt wird, öffnet Visual Studio automatisch die Dateien
LightActor.hundLightActor.cpp. Navigieren Sie zumLightActor.hDatei und erklären Sie Folgendes:LightActor.h
C++#include "Components/TimelineComponent.h"Als nächstes in der
LightActor-Klassendefinition, fügen Sie den folgenden Code hinzu:LightActor.h
C++public: UPROPERTY(EditAnywhere) UCurveFloat* PointLightFloatCurve; UPROPERTY(EditAnywhere) UCurveLinearColor* PointLightColorCurve; protected:Navigieren Sie zu
LightActor.cppund fügen Sie die folgenden Klassenbibliotheken hinzu.LightActor.cpp
C++#include "Components/BoxComponent.h" #include "Components/PointLightComponent.h"Im Konstruktor für
Ein Lichtactor::Ein Lichtactorerklären Sie Folgendes: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"));Als nächstes implementieren Sie die
UFunction-Methoden der Punktlicht-Komponente:LightActor.cpp
C++void ALightActor::UpdateLightBrightness(float BrightnessOutput) { PointLightComp->SetLightBrightness(BrightnessOutput * 20.0f); } void ALightActor::UpdateLightColor(FLinearColor ColorOutput) { PointLightComp->SetLightColor(ColorOutput); }Dann, in der
BeginPlay-Methode den folgenden Code hinzufügen: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)Kompilieren Sie Ihren Code.
Vom Inhaltsbrowser navigieren Sie zum C++-Klassenordner.
Klicken Sie mit der rechten Maustaste auf Lichtactor, wählen Sie Erstellen Sie eine Blueprint-Klasse basierend auf LightActor und benennen Sie den Blueprint-Actor BP_LightActor.
Die Klassenstandards des BP_LightActor werden wie folgt angezeigt:
In Arbeit befindlicher Code
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.
Erstellen und Binden des Kollisionsüberlappungsevents
Die Box-Komponente erfordert die Fähigkeit, das TimelineComponent auszulösen, wenn ein Actor seine Kollisionsgrenzen betritt.
Navigieren Sie zur Klassendefinition des
LightActor.hDatei und erklären Sie Folgendes unterHelligkeitsmultiplikator:LightActor.h
C++protected: UFUNCTION() void OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);Navigieren Sie anschließend zur Datei
LightActor.cppund implementieren Sie dieOnOverlapBegin-Funktion.LightActor.cpp
C++void ALightActor::OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) { LightTimelineComp->Play(); }Binden Sie die Überlappungsfunktion in die Methode
Spielbeginn:LightActor.cpp
C++//Binding our Box Component to our Light Actor's Overlap Function LightOverlapVolume->OnComponentBeginOverlap.AddDynamic(this, &ALightActor::OnOverlapBegin);Kompilieren Sie Ihren Code.
Vollständiger Code
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()
Einrichten des Helligkeits-Tracks
Wenn sich der Pebene mit den Grenzen der Box-Komponente des Licht-Actors überschneidet, benötigt die Timeline-Komponente eine Float-Kurve, um den Helligkeitswert der Punktlicht-Komponente zu manipulieren.
Die Leuchtkraft hat einen Anfangswert von 5000 und sinkt auf 0 über die Spanne von 5 Sekunden.
Navigieren Sie zum Inhaltsbrowser, wählen Sie Hinzufügen (+) > Verschiedenes > Kurve.
Wählen Sie CurveFloat und benennen Sie das Asset BrightnessCurveFloat.
Doppelklicken Sie auf HelligkeitskurveFloat zum Öffnen des Zeitleisten-Editor.
Fügen Sie der Float-Kurve zwei Schlüssel hinzu, indem Sie mit der rechten Maustaste auf das Diagramm klicken und wählen Sie dann Schlüssel hinzufügen. Passen Sie den Zeitwert des ersten Schlüssels an (0, 5000) an. Passen Sie den Zeitwert der zweiten Taste an (5, 0) an. Ihr BrightnessCurveFloat sollte wie folgt aussehen:
Speichern Sie das BrightnessCurveFloat und navigieren Sie dann zurück zum Inhaltsbrowser und doppelklicken Sie auf BP_LightActor, um seine Klassenstandards zu öffnen.
Navigieren Sie zum Details-Panel und wählen Sie Helligkeitskurve-Float aus dem Dropdown-Menü Punktlicht-Float-Kurve.
Klicken Sie die Schaltflächen Kompilieren und Speichern.
Einrichten des Farb-Tracks
Wenn sich der Pebene mit den Grenzen der Box-Komponente des Licht-Actors überschneidet, erfordert die PointLight-Zeitleiste einen linearen Farbkurven-Track, um die Farbeigenschaft der PointLight-Komponente zu manipulieren.
Navigieren Sie zum Inhaltsbrowser, wählen Sie Hinzufügen (+) > Verschiedenes > Kurve.
Wählen Sie CurveLinearColor und benennen Sie das Asset LinearColorCurve.
Doppelklicken Sie auf LinearColorCurve zum Öffnen des Zeitleisten-Editor.
Doppelklicken Sie auf den ersten Farbschlüssel, um ihn zu ändern, stellen Sie RGB ein auf: (R:1, G:0,665, B:0,015).
Doppelklicken Sie auf den zweiten Farbschlüssel, um ihn zu ändern, stellen Sie RGB ein auf: (R:0, G:0, B:0).
Wählen Sie den zweiten Punkt auf dem Diagramm und klicken Sie darauf und stellen Sie die Uhrzeit auf 5 Sekunden ein.
Ihre LienarColorCurve sollte wie folgt aussehen:
Speichern Sie LineareFarbkurve, navigieren Sie dann zurück zum Inhaltsbrowser und doppelklicken Sie auf BP_LightActor um die Klassenstandards zu öffnen.
Navigieren Sie zum Details-Panel und wählen Sie Helligkeitskurve-Float aus dem Dropdown-Menü Punktlicht-Float-Kurve.
Klicken Sie die Schaltflächen Kompilieren und Speichern.
Level-Einrichtung
Um die Funktionalität des von Ihnen geschriebenen Codes optimal zu demonstrieren, müssen Sie alle Lichtquellen-Actore aus dem Level entfernen.
Im Inhaltsbrowser navigieren Sie zum Asset BP_LightActor, wählen Sie es aus und ziehen Sie es in die Ebene.
Wählen Sie BP_LightActor im Welt-Outliner, navigieren Sie zum Details-Panel und stellen Sie Standort auf (0, 0, 300) ein und Skala auf (10, 10, 10).
Löschen Sie den DirectionalLight Actor im Welt-Outliner.
Das Level sollte wie folgt aussehen.
Endergebnis
Nachdem Sie nun den Licht-Actor und die Ebene eingerichtet haben, klicken Sie auf Spielen (PIE) um automatisch den Zuschauer-Pawn in Besitz zu nehmen.
Sie können den Zuschauer-Pawn steuern und in die Grenzen der Box-Komponente des Licht-Actors navigieren.
Sobald die Wiedergabefunktion der Zeitleistenkomponente ausgelöst wurde, sollten sich Farbe und Leuchtkraft des Lichts innerhalb von 5 Sekunden ändern.