Les lumières clignotantes sont une force puissante pour influencer le ton d'un environnement. Par exemple, une maison avec un éclairage d'une luminosité constante peut sembler chaleureuse et accueillante, mais si vous ajoutez des lumières clignotantes dans le couloir de cette même maison, cela devient hanté et pourrait suggérer un danger possible à l'avant. En modélisant et en scriptant stratégiquement différentes sources lumineuses dans votre expérience, vous pouvez ajouter un tout nouveau niveau à votre narration environnementale.
Comme pour toute création 3D, il existe de nombreuses façons d'atteindre un objectif particulier. Dans ce guide, vous pouvez rapidement créer une animation de lumière clignotante en utilisant des outils et des méthodes disponibles uniquement dans Studio avec seulement quelques actifs de base, y compris un fichier .rbxm pour le modèle de lampe de banquier qui contient des Class.MeshParts enfants que vous pouvez personnaliser pour correspondre à l'esthétique de vos propres expériences.
Dans la méthode suivante pour créer des lumières clignotantes, suivez chaque section pour apprendre à créer :
- Une NumberSequence de luminosité pour influencer la luminosité de la lampe au fil du temps.
- Un attribut de durée de boucle pour déterminer le temps que chaque boucle de clignotement doit prendre.
Importer la lampe d'exemple
Ce guide utilise un fichier .rbxm téléchargeable d'un modèle de lampe de banquier personnalisable et de haute qualité pour démontrer une technique de lumière clignotante. Vous pouvez utiliser ce modèle pour comprendre les principes de base, puis les appliquer à vos propres modèles que vous créez dans Studio ou d'autres logiciels de modélisation tiers.
Pour importer le BankersLamp .rbxm :
Dans la fenêtre Explorer, faites un clic droit sur Workspace. Un menu contextuel s'affiche.
Sélectionnez Insérer à partir d'un fichier... Une fenêtre de navigateur de fichiers s'affiche.
Sélectionnez le .rbxm BankersLamp, puis cliquez sur le bouton Ouvrir. Le modèle s'affiche dans la vue.

Créer une NumberSequence de luminosité
Une NumberSequence est un type de données qui représente une série de valeurs numériques de 0 à 1 pendant la durée de vie d'une instance. Ce type de données est utile pour créer des lumières clignotantes car vous pouvez spécifier comment vous souhaitez que la luminosité de la lumière de la lampe change au cours de sa durée de vie, et lorsque vous changez la luminosité de l'intensité totale à aucune lumière du tout en peu de temps, vous pouvez obtenir un effet de clignotement.
L'axe X d'une NumberSequence représente le temps, et l'axe Y représente la luminosité relative. Chaque carré au début et à la fin de la séquence est un point clé qui détermine la valeur de la propriété à ce point de la durée de vie de la luminosité de la lumière. Lorsque vous créez pour la première fois une NumberSequence, le graphique est une ligne droite et la lumière reste à la même intensité de luminosité tout au long de sa durée de vie, mais en ajoutant et en déplaçant des points clés, vous pouvez créer des courbes dans la séquence et modifier la luminosité de la lampe au fil du temps.

Bien que la lampe n'ait pas de NumberSequence de luminosité par défaut, vous pouvez créer un attribut de luminosité, le définir sur un type NumberSequence, puis expérimenter en ajoutant des points clés avec différentes valeurs jusqu'à ce que la lumière clignote à votre cadence choisie.
Pour créer une NumberSequence de luminosité :
Ajoutez un nouvel attribut NumberSequence au modèle de la lampe.
Dans la fenêtre Explorer, sélectionnez le modèle de lampe.
Dans la fenêtre Properties, accédez à la section Attributes et cliquez sur le bouton Add Attribute. La boîte de dialogue Add Attribute s'affiche.
Dans la boîte de dialogue Add Attribute,
Dans le champ Name, saisissez BrightnessCurve.
Cliquez sur le menu déroulant Type, puis sélectionnez NumberSequence.
Cliquez sur le bouton Save. Le nouvel attribut s'affiche dans la section Attributes de la fenêtre Properties.

Sélectionnez la nouvelle propriété BrightnessCurve, puis cliquez sur le bouton …. Un pop-up de numéro de séquence s'affiche.

Effectuez l'une des actions suivantes :
- Pour changer la luminosité à un point, cliquez sur un point clé et faites-le glisser vers le haut ou vers le bas, ou entrez une valeur dans le champ Value.
- Pour insérer de nouveaux points clés, cliquez sur n'importe quel point du graphique.
- Pour supprimer un point clé, sélectionnez le point clé, puis cliquez sur le bouton Delete.
- Pour ajouter une plage aléatoire pour la luminosité, cliquez sur n'importe quel point clé et faites glisser les lignes de l'enveloppe vers le haut ou vers le bas. À ce moment-là, la lumière génère une luminosité aléatoire entre l'enveloppe rose.
Par exemple, le graphique suivant fait clignoter la lumière à pleine luminosité pour le premier clignotement, 50 % de luminosité pour le deuxième clignotement, puis 75 % de luminosité pour le troisième clignotement.

Créer une durée de boucle
Maintenant que vous avez une NumberSequence pour déterminer comment la luminosité de la lumière de la lampe change au cours de sa durée de vie, vous devez déterminer combien de temps vous souhaitez que la boucle de clignotement prenne. En d'autres termes, cette durée de boucle contrôle essentiellement la fréquence à laquelle la NumberSequence se répète, en secondes.
Pour créer une durée de boucle :
Ajoutez un nouvel attribut de durée de boucle au modèle de la lampe.
Dans la fenêtre Explorer, sélectionnez le modèle de lampe.
Dans la fenêtre Properties, accédez à la section Attributes et cliquez sur le bouton Add Attribute. La boîte de dialogue Add Attribute s'affiche.
Dans la boîte de dialogue Add Attribute,
Dans le champ Name, saisissez LoopDuration.
Cliquez sur le menu déroulant Type, puis sélectionnez Number.
Cliquez sur le bouton Save. Le nouvel attribut s'affiche dans la section Attributes de la fenêtre Properties.

Définissez le nouvel attribut LoopDuration sur 1. Cela indique à la NumberSequence de se répéter après une seconde.
Script le clignotement de la lumière
Maintenant que vous avez tous les éléments pour contrôler la luminosité de votre lampe au cours de sa durée de vie, il est temps de créer un Script qui fera fonctionner le tout ensemble et fera clignoter la lumière.
Pour script le clignotement de la lumière :
- Dans la fenêtre Explorer, survolez le modèle de la lampe et cliquez sur le bouton ⊕. Un menu contextuel s'affiche.
- Dans le menu, insérez un Script.
- Dans le nouveau script, entrez ce qui suit :
local RunService = game:GetService("RunService")
-- Obtient les valeurs d'attribut définies sur le modèle.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Stocke les références aux instances du modèle qui changeront.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- Stocke les valeurs originales des propriétés qui changeront.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Obtient la valeur de la NumberSequence (ns) à un moment spécifique (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Si nous sommes à 0 ou 1, renvoie respectivement la valeur du premier ou du dernier point clé.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- Sinon, parcourt chaque paire séquentielle de points clés.
for i = 1, #ns.Keypoints - 1 do
-- Obtient le point clé actuel et le suivant.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Si nsTime est entre les temps des points clés,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Calcule où se situe nsTime entre les temps des points clés, appelle cela alpha.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Renvoie la valeur entre les points pour nsTime en utilisant alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Résout le temps de la NumberSequence (entre 0 et 1).
local t = time() / loopDuration
local numberSequenceTime = t - (t // 1)
-- Obtient la valeur de la NumberSequence à ce moment-là.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Ajuste les propriétés de luminosité et de couleur en fonction de cette valeur.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
Lorsque vous testez votre expérience, la connexion à l'événement Heartbeat exécute les opérations suivantes à chaque image :
- Résout un temps (numberSequenceTime) à l'intérieur de la brightnessCurve NumberSequence en fonction du temps actuel.
- Le temps est entre 0 et 1, car cela représente respectivement le début et la fin de la NumberSequence.
- Résout la valeur (brightnessValue) de la brightnessCurve NumberSequence au temps numberSequenceTime.
- evaluateNumberSequence() calcule la valeur associée au temps pour toute NumberSequence.
- Cette valeur sert de valeur de luminosité relative à appliquer aux propriétés qui changent au fil du temps.
- Change les propriétés de la lampe en multipliant brightnessValue par la luminosité de la lumière, la luminosité du faisceau et la couleur de l'ampoule.
Les modifications apportées à ces propriétés au fil du temps donnent lieu à l'effet clignotant ci-dessous.