Luci tremolanti è una potente forza nell'influenzare il tono di un ambiente. Ad esempio, una casa con un'illuminazione di luminosità costante può sembrare calda e accogliente, ma se aggiungi luci tremolanti al corridoio di quella stessa casa, diventa inquietante e potrebbe suggerire un possibile pericolo in arrivo. Modellando e programmando strategicamente diverse fonti di luce all'interno della tua esperienza, puoi aggiungere un nuovo livello alla tua narrazione ambientale.
Come in tutte le creazioni 3D, ci sono molti modi per raggiungere un obiettivo particolare. In questa guida, puoi rapidamente creare un'animazione di luce tremolante utilizzando strumenti e metodi disponibili solo all'interno di Studio con solo pochi beni di base, inclusi un file .rbxm per il modello della lampada del banchiere che contiene Class.MeshParts figlio che puoi personalizzare per adattarsi all'estetica delle tue esperienze.
Nel seguente metodo per creare luci tremolanti, segui ogni sezione per scoprire come creare:
- Una luminosità NumberSequence per influenzare la luminosità della lampada nel tempo.
- Un attributo di durata del ciclo per determinare la quantità di tempo necessaria ad ogni ciclo di tremolio.
Importa la lampada di esempio
Questa guida utilizza un file .rbxm scaricabile di un modello di lampada del banchiere personalizzabile e di alta qualità per dimostrare una tecnica di luce tremolante. Puoi utilizzare questo modello per comprendere i principi di base, quindi applicarli ai tuoi modelli che crei all'interno di Studio o di altri software di modellazione di terze parti.
Per importare la lampada del banchiere BankersLamp .rbxm:
Nella finestra Esplora, fai clic con il tasto destro del mouse su Workspace. Viene visualizzato un menu contestuale.
Seleziona Inserisci da file… Viene visualizzato un browser di file.
Seleziona il file BankersLamp .rbxm, quindi fai clic sul pulsante Apri. Il modello viene visualizzato all'interno dell'viewport.

Crea una NumberSequence di luminosità
Una NumberSequence è un tipo di dato che rappresenta una serie di valori numerici da 0 a 1 nel corso della vita di un'istanza. Questo tipo di dato è utile per creare luci tremolanti perché puoi specificare come vuoi che la luminosità della luce della lampada cambi nel suo ciclo di vita e quando cambi la luminosità da piena intensità a nessuna luce in successione rapida, puoi ottenere un effetto tremolante.
L'asse X di una NumberSequence rappresenta il tempo e l'asse Y rappresenta la luminosità relativa. Ogni quadrato all'inizio e alla fine della sequenza numerica è un punto chiave che determina il valore della proprietà in quel punto della vita della luminosità della luce. Quando crei per la prima volta una NumberSequence, il grafico è una retta e la luce rimane della stessa intensità di luminosità per tutta la sua vita, ma aggiungendo e spostando i punti chiave intorno, puoi creare curve all'interno della sequenza e cambiare la luminosità della lampada nel tempo.

Sebbene la lampada non abbia una NumberSequence di luminosità per impostazione predefinita, puoi creare un attributo di luminosità, impostarlo su un tipo NumberSequence, quindi sperimentare aggiungendo punti chiave con valori diversi fino a quando la luce non tremola al tuo set di cadenza.
Per creare una NumberSequence di luminosità:
Aggiungi un nuovo attributo NumberSequence al modello della lampada.
Nella finestra Esplora, seleziona il modello della lampada.
Nella finestra Proprietà, vai alla sezione Attributi e fai clic sul pulsante Aggiungi attributo. Viene visualizzato il dialogo Aggiungi attributo.
Nel dialogo Aggiungi attributo,
Nel campo Nome, inserisci BrightnessCurve.
Fai clic sul menu a discesa Tipo, quindi seleziona NumberSequence.
Fai clic sul pulsante Salva. Il nuovo attributo viene visualizzato nella sezione Attributi della finestra Proprietà.

Seleziona la nuova proprietà BrightnessCurve, quindi fai clic sul pulsante …. Viene visualizzato un pop-up della sequenza numerica.

Esegui una delle seguenti azioni:
- Per cambiare la luminosità in un punto, fai clic su un punto chiave e trascinalo verso l'alto o verso il basso, oppure inserisci un valore nel campo Valore.
- Per inserire nuovi punti chiave, fai clic su qualsiasi punto nel grafico.
- Per eliminare un punto chiave, seleziona il punto chiave, quindi fai clic sul pulsante Elimina.
- Per aggiungere un intervallo casuale per la luminosità, fai clic su qualsiasi punto chiave e trascina le linee dell'involucro verso l'alto o verso il basso. In quel momento, la luce genera una luminosità casuale tra l'involucro rosa.
Ad esempio, il seguente grafico fa tremolare la luce fino alla piena luminosità per il primo tremolio, al 50% di luminosità per il secondo tremolio, quindi al 75% di luminosità per il terzo tremolio.

Crea una durata del ciclo
Ora che hai una NumberSequence per determinare come cambia la luminosità della luce della lampada nel suo ciclo di vita, devi determinare quanto tempo vuoi che duri il ciclo di tremolio. In altre parole, questa durata del ciclo controlla essenzialmente quanto spesso la NumberSequence si ripete, in secondi.
Per creare una durata del ciclo:
Aggiungi un nuovo attributo di durata del ciclo al modello della lampada.
Nella finestra Esplora, seleziona il modello della lampada.
Nella finestra Proprietà, vai alla sezione Attributi e fai clic sul pulsante Aggiungi attributo. Viene visualizzato il dialogo Aggiungi attributo.
Nel dialogo Aggiungi attributo,
Nel campo Nome, inserisci LoopDuration.
Fai clic sul menu a discesa Tipo, quindi seleziona Numero.
Fai clic sul pulsante Salva. Il nuovo attributo viene visualizzato nella sezione Attributi della finestra Proprietà.

Imposta il nuovo attributo LoopDuration su 1. Questo indica alla NumberSequence di ripetersi dopo un secondo.
Script per il tremolio della luce
Ora che hai tutti gli elementi per controllare la luminosità della tua lampada nel corso della sua vita, è tempo di creare un Script che unirà tutto e farà tremolare la luce.
Per scriptare il tremolio della luce:
- Nella finestra Esplora, passa il mouse sopra il modello della lampada e fai clic sul pulsante ⊕. Viene visualizzato un menu contestuale.
- Dal menu, inserisci uno Script.
- Nel nuovo script, inserisci quanto segue:
local RunService = game:GetService("RunService")
-- Ottiene i valori degli attributi impostati sul modello.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Memorizza riferimenti alle istanze del modello che cambieranno.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- Memorizza i valori originali delle proprietà che cambieranno.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Ottiene il valore della NumberSequence (ns) a un'ora specifica (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Se siamo a 0 o 1, restituisce il valore del primo o dell'ultimo punto chiave, rispettivamente.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- Altrimenti, scorre ciascuna coppia sequenziale di punti chiave.
for i = 1, #ns.Keypoints - 1 do
-- Ottiene il punto chiave corrente e il successivo.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Se nsTime è compreso tra i tempi dei punti chiave,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Calcola dove nsTime si trova tra i tempi dei punti chiave, chiama questo alpha.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Restituisce il valore fra i punti per nsTime utilizzando alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Risolve il tempo della NumberSequence (tra 0 e 1).
local t = time() / loopDuration
local numberSequenceTime = t - (t // 1)
-- Ottiene il valore della NumberSequence a questo tempo.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Regola le proprietà di luminosità e colore in base a questo valore.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
Quando testi la tua esperienza, la connessione all'evento Heartbeat esegue quanto segue ad ogni frame:
- Risolve un tempo (numberSequenceTime) all'interno della brightnessCurve NumberSequence basato sul tempo attuale.
- Il tempo è compreso tra 0 e 1 poiché questi rappresentano l'inizio e la fine della NumberSequence, rispettivamente.
- Risolve il valore (brightnessValue) della brightnessCurve NumberSequence a tempo numberSequenceTime.
- evaluateNumberSequence() calcola il valore associato con il tempo per qualsiasi NumberSequence.
- Questo valore serve come valore di luminosità relativa da applicare alle proprietà che cambiano nel tempo.
- Cambia le proprietà delle lampade moltiplicando brightnessValue per la luminosità della luce, la luminosità del fascio e il colore della lampadina.
Le modifiche a queste proprietà nel tempo producono l'effetto tremolante qui sotto.