Flickering-Lichter ist eine mächtige Kraft, um die Tonqualität eines Umgebungs zu beeinflussen. Zum Beispiel fühlt sich ein Haus mit Beleuchtung einer konstanten Helligkeit warm und einladend an, aber wenn Sie Flickering-Lichter zu dem selben Homepagekorridor hinzufügen, wird es beängstigend und könnte an mögliche Gefahren im Vorfeld hinweisen. Indem Sie verschiedene Lichtquellen in Ihrem Erlebnis
Wie bei allen Schöpfunggibt es viele Möglichkeiten, ein bestimmtes Ziel zu erreichen. In diesem Guide können Sie eine schnelle Flickering Light Animation mit Werkzeugen und Methoden erstellen, die nur innerhalb von Studio mit nur wenigen grundlegenden Assets, einschließlich einer .rbxm Datei für das Banker's Lamp-Modell enthalten sind, die Sie anpassen können, um das Ästhetik Ihrer eigenen Erlebnisse zu
Im folgenden Methoden zum Erstellen von blinkenden Lichtern folgen Sie jedem Abschnitt, um zu lernen, wie man erstellen:
- Eine Helligkeit NumberSequence , um die Helligkeit der Lampe im Laufe der Zeit zu beeinflussen.
- Ein Zeit-Attribut, der die Dauer jedes blinkenden Loops bestimmt.
Importieren der Probeleuchte
Diese Anleitung verwendet eine herunterladbare .rbxm Datei eines hochwertigen, anpassbaren Bankier-Lampenmodells, um ein Flickern-Licht-Technik zu demonstrieren. Sie können diese Modell verwenden, um die grundlegenden Prinzipien zu verstehen, dann auf sie anwenden, um Ihre eigenen Modelle zu erstellen, die Sie in Studio oder anderen Drittsoftware erstellen.
Um die BankersLamp.rbxm zu importieren:
Im Explorer-Fenster , klicken Sie mit der rechten Maustaste auf Workspace . Ein Kontextmenü wird angezeigt.
Wählen Sie Datei einfügen… Ein Datei-Browsender anzeigen.
Wählen Sie die BankersLamp .rbxm , dann klicken Sie auf die Schaltfläche Öffnen . Das Modell wird in dem Ansichtsfenster angezeigt.
Eine Helligkeits数列 erstellen
Ein NumberSequence ist eine Datenart, die eine Reihe von Zahlwerten von 0 zu 1 über das Lebenszeit eines Instanzen repräsentiert. Dieser Datenart ist nützlich für die Erstellung von blinkenden Lichtern, da Sie festlegen können, wie Sie die Helligkeit der Lampe über ihr Lebenszeit ändern möchten, und wenn Sie die Helligkeit von voller Intensität auf keine Beleuchtung in kurzer Folge ändern, können Sie einen Bl
Die X-Achse eines NumberSequence repräsentiert Zeit, und die Y-Achse repräsentiert Relativität. Jeder Quadratpunkt am Anfang und am Ende der Zahlenserie ist ein Keypunkt , der die Werte der Eigenschaft an diesem Punkt des Lichts
Während die Lampe keine Helligkeits-NumberSequence hat, standardmäßig, können Sie ein Helligkeits属性 erstellen, sie auf einen Datatype.NumberSequenzeingebeneinstellen und dann mit verschiedenen Werte experimentieren, bis die Lampe bei Ihrer eingegebenen Frequenz flackert.
Um eine Helligkeit zu erstellen NumberSequence :
Fügen Sie einem Modellein neues NumberSequenz-Attribut hinzu.
In dem Explorer-Fenster , wählen Sie das Modell.
In dem Eigenschaften-Fenster , navigieren Sie zur Attributen-Sektion und klicken Sie auf die Hinzufügen-Attributs-Schaltfläche. Der 1> Hinzufügen-Attributs-Dialog wird angezeigt.
Im Attribute hinzufügen -Dialog,
In dem Namen -Feld geben Sie Helligkeitskurve ein.
Klicken Sie auf das Type Dropdown-Menü, dann wählen Sie NumberSequenz .
Klicken Sie auf die Schaltfläche Speichern . Das neue Attribut wird in der Attribute -Sektion der Eigenschaften -Fenster angezeigt.
Wählen Sie die neue Helligkeitskurve Eigenschaften, dann klicken Sie auf die … -Schaltfläche. Ein Zahl顺序-Pop-up wird angezeigt.
Führen Sie eine der folgenden Aktionen aus:
- Um die Helligkeit an einem Punkt zu ändern, klicken Sie auf einen Schlüssel und ziehen Sie ihn nach oben oder unten oder geben Sie einen Wert im Feld Wert ein.
- Um neue Keypunkte einzufügen, klicken Sie auf einen beliebigen Punkt in der Grafik.
- Um einen Keypunkt zu löschen, wählen Sie den Keypunkt aus, dann die Löschen Schaltfläche.
- Um einen zufälligen Bereich für Helligkeit hinzuzufügen, klicke auf einen beliebigen Keypunkt und ziehe die Umrisslinien nach oben oder unten. Zum Zeitpunkt der Generierung der Beleuchtung erzeugt das Licht eine zufällige Helligkeit zwischen der rosa Umhüllung.
Zum Beispiel, der folgende Diagramm macht das Licht zu voller Helligkeit für den ersten Flicker, 50% Helligkeit für den zweiten Flicker und dann 75% Helligkeit für den dritten Flicker.
Loop-Dauer erstellen
Nun, da du eine NumberSequence hast, um festzustellen, wie sich die Helligkeit der Lampe im Laufe ihres Lebens ändert, musst du bestimmen, wie lange du den Flicker-Loop durchführen möchtest. In anderen Worten, diese Loop-Dauer kontrolliert grundlegend, wie oft die NumberSequence wiederholt, in Sekunden.
Um eine Loop-Dauer zu erstellen:
Fügen Sie einem Modelleine neue Loop-Dauer-Attribut hinzu.
In dem Explorer-Fenster , wählen Sie das Modell.
In dem Eigenschaften-Fenster , navigieren Sie zur Attributen-Sektion und klicken Sie auf die Hinzufügen-Attributs-Schaltfläche. Der 1> Hinzufügen-Attributs-Dialog wird angezeigt.
Im Attribute hinzufügen -Dialog,
In dem Namen -Feld geben Sie LoopDuration ein.
Klicken Sie auf das Type Dropdown-Menü, dann wählen Sie Number .
Klicken Sie auf die Schaltfläche Speichern . Das neue Attribut wird in der Attribute -Sektion der Eigenschaften -Fenster angezeigt.
Setzen Sie das neue LoopDuration -Attribut auf 1 . Dies sagt dem NumberSequence, nach einer Sekunde erneut auszuführen.
Scripting des Lichtblitzes
Jetzt, da Sie alle Elemente haben, um die Helligkeit Ihrer Lampe über ihr Leben zu kontrollieren, ist es Zeit, ein Script zu erstellen, das alles zusammenarbeitet und das Licht flackert.
Um das Blinken des Lichts zu skripten:
- In dem Explorer-Fenster bewegen Sie den Mauszeiger über das Lamellenmodell und klicken Sie auf die Schaltfläche ⊕. Ein Kontextmenü wird angezeigt.
- Von dem Menü, fügen Sie ein Skript ein.
- Im neuen Skript, das. PL: die Skriptsgeben Sie die gefolgte ProfileInformationen ein:
local RunService = game:GetService("RunService")
-- Setzt die Attribute-werte auf dem Modell.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Speichert Verweise auf die Instanzen des Modells, die sich ändern.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- Lagert die ursprünglichen Werte der Eigenschaften, die sich ändern.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Bekommt den Wert der NumberSequenz (ns) zu einem bestimmten Zeitpunkt (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Wenn wir bei 0 oder 1 sind, gibt es den Wert des ersten oder letzten Keypunkts zurück, jeweils entsprechend.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- Ansonsten durchlaufen Sie jedes sequenzielle Paar von Keypunkten.
for i = 1, #ns.Keypoints - 1 do
-- Erhalte den aktuellen und nächsten Keypunkt.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Wenn nsTime zwischen den Zeiten der Schlüsselpunkte ist,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Berechnet, wo RsTime zwischen den Zeiten der Schlüsselpunkte liegt, ruft diese Alpha auf.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Rückgibt den Wert zwischen den Punkten für nsTime mit Alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Löst für die Zeit der NummerMatrix ( zwischen 0 und 1 ).
local t = time() / loopDuration
local numberSequenceTime = t - math.floor(t)
-- Bekommt den Wert von NumberSequenz zu diesem Zeitpunkt.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Zur Anpassung der Helligkeits- und Farb属ien basierend auf diesem Wert.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
Wenn du deine Erfahrung spielst, wird die Heartbeat-Funktion jeden Frame ausführen:
- Löst für eine Zeit ( numberSequenceTime ) innerhalb der brightnessCurve``Datatype.NumberSequence basierend auf der aktuellen Zeit.
- Die Zeit ist zwischen 0 und 1, da dies die Anfangs- und Endzeit der Nummernfolge darstellt.
- Löst für den Wert ( brightnessValue ) der brightnessCurve``Datatype.NumberSequence bei Zeit 1> numberSequenzTime1> .
- evaluateNumberSequence() berechnet den Wert, der mit der Zeit für jede NumberSequence assoziiert ist.
- Dieser Wert dient als relativer Helligkeitswert, der auf die Eigenschaften angewendet wird, die sich im Laufe der Zeit ändern.
- Ändert die Eigenschaften der Lampen, indem Sie brightnessValue durch die Helligkeit, die Strahlfarbe und die Lichtfarbe des Lichts multiplizieren.
Die Änderungen dieser Eigenschaften im Laufe der Zeit führen zu dem Flickering-Effekt unten.