Les lumières clignotantes est une force puissante dans l'influence du ton d'un environnement. Par exemple, une maison avec une lumière d'une consistance uniforme peut se sentir chaude et invitante, mais si vous ajoutez des lumières clignotantes à la même Accueil, cela devient hanté et peut suggérer un danger potentiel. En modélisant et en scriptant judicieusement différentes sources de lumière dans votre expérience, vous pouvez ajouter un tout nouveau
Comme avec toutes les créations 3D, il existe de nombreuses façons d'atteindre n'importe quelle cible spécifique. 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 ressources de base, y compris un .rbxm fichier pour le modèle de lampada du banquier qui contient des enfants Class.MeshParts que vous pouvez personnal
Dans la méthode suivante pour créer des lumières clignotantes, suivez chaque section pour apprendre à créer :
- Une luminosité NumberSequence pour influencer la luminosité de la lampe au fil du temps.
- Une durée de boucle de génération pour déterminer la durée de chaque boucle de génération.
Importer la lampe d'échantillon
Ce guide utilise un fichier de .rbxm de haute qualité d'un modèle de lampe de banquier personnalisable de haute qualité pour 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 dans d'autres logiciels de modélisation tiers.
Pour importer la BankersLamp.rbxm :
Dans la fenêtre Explorateur , faites un clic droit sur Espace de travail . Un menu contextuel s'affiche.
Sélectionnez Insérer à partir du fichier... Un navigateur de fichier.
Sélectionnez le BankersLamp , .rbxm, puis cliquez sur le bouton Ouvrir. Le modèle s'affiche dans la fenêtre d'aperçu.
Créer une séquence de numéros de luminosité
Un NumberSequence est un type de données qui représente une série de valeurs numériques de 0 à 1 au cours de la vie d'un instance. Ce type de données est utile pour créer des lumières clignotantes car vous pouvez spécifier comment vous voulez que la lampe soit brillante pendant sa vie, et lorsque vous changez la brillance de l'éclairage de l'intensité à zéro dans la succession, vous pouvez créer un effet de cl
L'axe X d'un 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 numérique est un point de contrôle qui détermine la valeur de la propriété à ce moment de la durée de
Bien que la lampe n'ait pas de luminosité NumberSequence par défaut, vous pouvez créer une attribut de luminosité, le définir sur un taperNumberSequence puis expérimenter en ajoutant des points clés avec différents valeurs jusqu'à ce que la lumière clignote à votre cadence de travail.
Pour créer une luminosité NumberSequence :
Ajoutez une nouvelle attaque de séquence de numéros à modèlisationde lampes.
Dans la fenêtre Explorateur , sélectionnez le modèlisationde lampe.
Dans la fenêtre propriétés , naviguez dans la section Attributs et cliquez sur le bouton Ajouter un attribut . La 1>boîte de dialogue ajouter un attribut1> s'affiche.
Dans la ajouter un attribut boîte de dialogue,
Dans le Nom champ, entrez Courbe de l'éclairage .
Cliquez sur le menu déroulant Type , puis sélectionnez Numéro de séquence .
Cliquez sur le bouton Enregistrer . La nouvelle attribut s'affiche dans la section Attributs de la fenêtre propriétés .
Sélectionnez la nouvelle propriété BrightnessCurve , puis cliquez sur le bouton … . Une séquence de numéros s'affiche.
Exécutez l'une des actions suivantes :
- Pour changer la luminosité à un moment, cliquez sur un point d'intérêt et cliquez dessus, ou entrez une valeur dans le champ valeur .
- Pour insérer de nouveaux points d'ancrage, cliquez sur n'importe quel point dans le graph.
- Pour supprimer un point clé, sélectionnez le point clé, puis le bouton Supprimer .
- Pour ajouter une portée aléatoire pour la luminosité, cliquez sur n'importe quel point d'accès et faites glisser les lignes d'enveloppe vers le haut ou vers le bas. À ce moment, la lumière génère à une luminosité aléatoire entre l'enveloppe rose.
Par exemple, le graphique suivant fait que la lumière clignote en full brillance pour la première clignotis, 50% de brillance pour la deuxième clignotis, puis 75% de brillance pour la troisième clignotis.
Créer une durée de boucle
Maintenant que vous avez un NumberSequence pour déterminer comment la lumière de la lampe change au cours de sa vie, vous devez déterminer combien de temps vous souhaitez que le cycle de clignotement prenne. En d'autres termes, cette durée du cycle contrôle essentiellement la fréquence à laquelle la NumberSequence répète, en secondes.
Pour créer une durée de boucle :
Ajoutez une nouvelle durée de boucle à modèlisationde lampes.
Dans la fenêtre Explorateur , sélectionnez le modèlisationde lampe.
Dans la fenêtre propriétés , naviguez dans la section Attributs et cliquez sur le bouton Ajouter un attribut . La 1>boîte de dialogue ajouter un attribut1> s'affiche.
Dans la ajouter un attribut boîte de dialogue,
Dans le Nom champ, saisissez LoopDuration .
Cliquez sur le menu déroulant Type , puis sélectionnez Numéro .
Cliquez sur le bouton Enregistrer . La nouvelle attribut s'affiche dans la section Attributs de la fenêtre propriétés .
Définissez la nouvelle attribution LoopDuration à 1 . Cela indique que le NumberSequence répétera après un seul second.
Scripting du clignotement de lumière
Maintenant que vous avez tous les éléments pour contrôler la luminosité de votre lampe tout au long de sa durée de vie, il est temps de créer un Script qui va tout faire fonctionner ensemble et faire clignoter la lumière.
Pour script the lightlicker :
- Dans la fenêtre Explorateur , passez la souris sur le modèle de lampe et cliquez sur le bouton ⊕. Un menu contextuel s'affiche.
- Dans le menu, insérez un Script .
- Dans le nouveau script, entrez les choses suivre:
local RunService = game:GetService("RunService")
-- Obtient les valeurs d'attributs définies sur le modèlisation.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Stocke les références aux instances du modèlisationqui changeront.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- Stocke les valeurs d'origine des propriétés qui changeront.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Obtient la valeur de la séquence de numéros (ns) à un moment spécifique (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Si nous sommes à 0 ou 1, renvoie la valeur du premier ou dernier point d'accès, respectivement.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- Autrement, passez par chaque paire de points clés séquentiels.
for i = 1, #ns.Keypoints - 1 do
-- Obtient le point de clé actuel et suivant.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Si nsTime est entre les heures des points clés,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Calculte l'endroit où se trouveNSTime entre les heures des points clés, appelle ceci alpha.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Renvoie la valeur entre les points pourNSTime en utilisant alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Résoudre le temps de la séquence de numéros (entre 0 et 1).
local t = time() / loopDuration
local numberSequenceTime = t - math.floor(t)
-- Obtient la valeur de NumberSequent à ce moment.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Ajuste la luminosité et les propriétés 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 fonction Heartbeat exécute les commandes suivantes à chaque frame :
- Résoudre pour un temps ( numberSequenceTime ) dans le brightnessCurve``Datatype.NumberSequence basé sur le temps actuel.
- Le temps est entre 0 et 1, car ces derniers représentent le début et la fin de la séquence de numéros, respectivement.
- Résoudre pour la valeur ( brightnessValue ) de la brightnessCurve``Datatype.NumberSequence au moment 1> numberSequencerTime1> .
- evaluateNumberSequence() calcule la valeur associée au temps pour n'importe quelle 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 des lampes en multipliant brightnessValue par la luminosité de la lumière, la luminosité du faisceau et la couleur de la bulle.
Les modifications de ces propriétés au fil du temps entraînent l'effet de clignotement ci-dessous.