Flickering lights è una potente forza nell'influenza del tono di un Ambiente. Ad esempio, una casa con luce di una tonalità coerente può sentirsi caldo e invitante, ma se aggiungi luce lampeggiante alle stesse entrate di un'Inizio, diventa haunted e potrebbe suggerire un pericolo possibile in avanti. Modellando e scripting in modo strategico delle diverse fonte di luce all'interno della tua esperienza, puoi
Come con tutte le Creazioni3D, ci sono molti modi per raggiungere qualsiasi obiettivo specifico. In questa guida, puoi creare rapidamente un'animazione lampeggiante utilizzando strumenti e metodi disponibili solo all'interno di Studio con solo alcune risorse di base, tra cui un .rbxm file per il modello della lampada del banker che contiene child Class.MeshParts che puoi personalizzare
Nel seguente metodo per creare luci lampeggianti, segui ogni sezione per imparare a creare:
- Una luce NumberSequence per influenzare la luce della lampada nel tempo.
- Un attributo della durata del ciclo per determinare la quantità di tempo che ogni ciclo lampeggiante deve richiedere.
Importazione della lampada di esempio
Questa guida utilizza un file .rbxm di alta qualità e personalizzabile di un modello lampada da banco di alta qualità per mostrare una tecnica di luce lampeggiante. Puoi utilizzare questo modello per capire i principi di base e quindi applicarli ai tuoi modelli che crei all'interno di Studio o in altri software di modellazione di terze parti.
Per importare il BankersLamp.rbxm :
Nella finestra Explorer , fai clic con il pulsante destro del mouse su Workspace . Viene visualizzato un menu contestuale.
Seleziona Inserisci dal file... Un browser del file.
Seleziona il BankersLamp , quindi fai clic sul pulsante .rbxm. Il modello viene visualizzato all'interno della finestra.
Creazione di una sequenza di brillantezza
Un NumberSequence è un tipo di dati che rappresenta una serie di valori numerici da 0 a 1 nel corso della vita di un'esempio. Questo tipo di dati è utile per creare luci lampeggianti poiché puoi specificare come vuoi che la luce della lampada cambi nel corso della sua vita, e quando cambi la luce da piena intensità a niente in breve successione, puoi ottenere un effetto lampeggiante
L'asse X di un NumberSequence rappresenta il tempo, e l'asse Y rappresenta la luce relativa. Ogni quadrato all'inizio e alla fine della sequenza dei numeri è un punto di interruzione che determina il valore della proprietà in quel punto della luce. Qu
Mentre la lampada non ha un'illuminazione NumberSequence di default, puoi creare un'attributo di illuminazione, impostarlo su un inserisci / scrividi NumberSequence e quindi sperimentare aggiungendo punti chiave con valori diversi fino a quando la luce non fa clic in modo da setare la velocità di impostazione predefinita.
Per creare una luminosità NumberSequence :
Aggiungi un nuovo attributo NumberSequenza al modello lamp.
Nella finestra Explorer , seleziona il modello lampada.
Nella finestra Proprietà, fai clic sulla sezione Attributi e fai clic sul pulsante Aggiungi Attributo. La finestra di dialogo 2>Aggiungi Attributo2> viene visualizzata.
Nella finestra di dialogo Aggiungi attributi ,
Nel campo Nome , inserisci BrightnessCurve .
Fai clic sul menu a discesa Tipo , quindi seleziona Sequenza di numeri .
Click the Salva button. The new attribute displays in the Attributi section of the Proprietà window.
Seleziona la nuova Proprietà BrightnessCurve e quindi fai clic sul pulsante … . Viene visualizzata una sequenza di numeri.
Esegui una delle seguenti azioni:
- Per cambiare il livello di luminosità in un punto, fai clic su un keypoint e trascinalo verso l'alto o verso il basso, o inserisci un valore nel campo Valore .
- Per inserire nuovi punti di interruzione, fai clic su qualsiasi punto nel grafico.
- Per eliminare un punto di interruzione, seleziona il punto di interruzione, quindi il pulsante Elimina .
- Per aggiungere una gamma casuale per la luce, fai clic su qualsiasi punto d'interruzione e trascina le linee dell'invio su o giù. In quel momento, la luce genera una gamma casuale tra l'invio rosa.
Ad esempio, il seguente grafico fa tremolare la luce fino alla massima luce per il primo tremolare, 50% di luce per il secondo tremolare, quindi 75% di luce per il terzo tremolare.
Creazione di una durata di loop
Ora che hai un NumberSequence per determinare la luce della lampada cambia nel corso della sua vita, devi determinare quanto tempo vuoi che il loop di pixelizzazione richieda. In altre parole, questa durata del loop controlla essenzialmente la velocità con cui si ripetisce il NumberSequence , in secondi.
Per creare una durata del loop:
Aggiungi un nuovo attributo di durata del modelloalla lampada.
Nella finestra Explorer , seleziona il modello lampada.
Nella finestra Proprietà, fai clic sulla sezione Attributi e fai clic sul pulsante Aggiungi Attributo. La finestra di dialogo 2>Aggiungi Attributo2> viene visualizzata.
Nella finestra di dialogo Aggiungi attributi ,
Nel campo Nome , inserisci LoopDuration .
Fai clic sul menu a discesa digita , quindi seleziona numero .
Click the Salva button. The new attribute displays in the Attributi section of the Proprietà window.
Imposta il nuovo LoopDuration attribute to 1 . Questo dice al NumberSequence di ripetere dopo un secondo.
Scripting del Flicker della Luce
Ora che hai tutti gli elementi per controllare la luce della tua lampada nel corso della sua vita, è ora di creare un Script che getterà tutto in ordine e farà tremare la luce.
Per scriptare il lampeggio della luce:
- Nella finestra Explorer , passa il mouse sul modello della lampada e fai clic sul pulsante ⊕. Viene visualizzato un menu contestuale.
- Dal menu, inserisci uno script.
- Nel nuovo script, inserisci il Seguendo:
local RunService = game:GetService("RunService")
-- Ottiene i valori dell'attributo impostati sul modello.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- memorizza i 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 di NumberSequenza (ns) in un momento specifico (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Se siamo a 0 o 1, restituisce il valore della prima o dell'ultimo punto di interruzione, rispettivamente.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- Altrimenti, passa attraverso ciascun paio sequenziale di punti chiave.
for i = 1, #ns.Keypoints - 1 do
-- Ottiene il punto chiave corrente e successivo.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Se nsTime è tra i tempi dei punti chiave,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Calcola dove si trova nsTime tra i tempi dei punti chiave, chiama questa alpha.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Restituisce il valore tra i punti per NSTime utilizzando alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Risolve il tempo per la NumberSequenza (tra 0 e 1).
local t = time() / loopDuration
local numberSequenceTime = t - math.floor(t)
-- Ottiene il valore di NumberSequenza in questo momento.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Ajusts brightness and color properties based on this value.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
Quando provi la tua esperienza, la funzione Heartbeat esegue i seguenti frame ogni volta:
- Risolve per un tempo ( numberSequenceTime ) entro il brightnessCurve basato sul tempo attuale.
- Il tempo è tra 0 e 1 in quanto questi rappresentano l'inizio e la fine della NumberSequenza, rispettivamente.
- Risolve per il valore ( brightnessValue ) della brightnessCurve``Datatype.NumberSequence al momento 1> numberSequenzaTime1> .
- evaluateNumberSequence() calcola il valore associato al tempo per qualsiasi NumberSequence .
- Questo valore serve come valore di luce relativa da applicare alle proprietà che cambiano nel tempo.
- Cambia le proprietà delle lampade moltiplicando brightnessValue per la luce, la brillantezza del raggio e il colore della lampada.
I cambiamenti di queste proprietà nel corso del tempo hanno dato origine all'effetto lampeggiante sottostante.