As luzes piscando são uma força poderosa em influenciar o tom de um ambiente. Por exemplo, uma casa com iluminação de um brilho consistente pode se sentir quente e convidativa, mas se você adicionar luzes piscando ao corredor da mesma início, ela se torna assombrosa e pode sugerir um possível perigo à frente. Ao modelar e programar estrategicamente diferentes fontes de luz dentro de sua experiência, você pode adicionar um novo nível à sua narrativa ambiental.
Como com todas as criações em 3D, existem muitas maneiras de alcançar qualquer objetivo específico. Neste guia, você pode criar rapidamente uma animação de luz piscando usando ferramentas e métodos disponíveis apenas no Studio com apenas alguns ativos básicos, incluindo um arquivo .rbxm para o modelo de lâmpada do banqueiro que contém criança Class.MeshParts que você pode personalizar para se adequar à estética de suas próprias experiências.
No seguinte método para criar luzes piscando, siga cada seção para aprender como Criar:
Um brilho NumberSequence para influenciar o brilho da lâmpada ao longo do tempo.
Um atributo de duração de loop para determinar a quantidade de tempo que cada loop piscando deve levar.
Um Script que configura como os dois atributos funcionam com o filho do modelo MeshParts para piscar a luz da lâmpada.
Você pode criar seus próprios ativos em ferramentas de modelagem de terceiros e seguir junto com seu próprio design. Para obter informações sobre como exportar modelos para uso no Studio, consulte Exportação de Requisitos .
Importando a Lâmpada de Amostra
Este guia usa um arquivo .rbxm para download de um modelo de lâmpada de banqueiro de alta qualidade e personalizável para demonstrar uma técnica de luz piscando. Você pode usar este modelo para entender os princípios básicos e, em seguida, aplicá-los aos seus próprios modelos que você cria no Studio ou em outro software de modelagem de terceiros.
Para importar o BankersLamp.rbxm :
Na janela Explorer , clique com o botão direito Workspace . Um menu contextual é exibido.
Selecione Inserir de arquivo... Um navegador de arquivos é exibido.
Selecione a BankersLamp .rbxm , e clique no botão Abrir . O modelo é exibido no campo de janela.
Criando uma sequência de números de brilho
Um NumberSequence é um tipo de dados que representa uma série de valores numéricos de 0 a 1 ao longo da vida de uma instância. Este tipo de dados é útil para criar luzes piscando porque você pode especificar como deseja que o brilho da luz da lâmpada mude ao longo de sua vida, e quando você muda o brilho de intensidade total para nenhuma luz em breve sucessão, você pode alcançar um efeito piscando.
O eixo X de um NumberSequence representa o tempo e o eixo Y representa o brilho relativo. Cada quadrado no início e no final da sequência de números é um ponto-chave **** que determina o valor da propriedade naquele ponto da vida útil do brilho da luz. Quando você cria um NumberSequence pela primeira vez, o gráfico é uma linha reta e a luz permanece com a mesma intensidade de brilho ao longo de sua vida, mas adicionando e movendo pontos-chave ao redor, você pode criar curvas dentro da sequência e alterar o brilho da lâmpada ao longo do tempo.
Embora a lâmpada não tenha um brilho NumberSequence por padrão, você pode criar um atributo de brilho, configurá-lo como NumberSequence e, em seguida, experimentar adicionando pontos-chave com valores diferentes até que a luz flicke na cadência definida.
Para criar um brilho NumberSequence :
Adicione um novo atributo NumberSequence ao modelo da lâmpada.
Na janela Explorer , selecione o modelo da lâmpada.
Na janela Propriedades , navegue até a seção Atributos e clique no botão Adicionar Atributo . O diálogo Adicionar Atributo é exibido.
Na caixa de diálogo Adicionar Atributo ,
No campo Nome , insira Curva de Brilho .
Clique no menu suspenso Digite e selecione Sequência de números .
Clique no botão Salvar . O novo atributo é exibido na seção Atributos da janela Propriedades .
Selecione a nova propriedade BrightnessCurve e clique no botão ... . Um pop-up de sequência de números é exibido.
Realize uma das seguintes ações:
Para alterar o brilho em um ponto, clique em um ponto-chave e arraste-o para cima ou para baixo, ou insira um valor no campo Valor .
Para inserir novos pontos-chave, clique em qualquer ponto do gráfico.
Para excluir um ponto-chave, selecione o ponto-chave e, em seguida, o botão Delete .
Para adicionar um intervalo aleatório de brilho, clique em qualquer ponto-chave e arraste as linhas do envelope para cima ou para baixo. Nesse momento, a luz gera um brilho aleatório entre o envelope rosa.
Por exemplo, o gráfico a seguir faz com que a luz cintile até o brilho total para a primeira cintilação, 50% de brilho para a segunda cintilação e 75% de brilho para a terceira cintilação.
Criando uma Duração de Loop
Agora que você tem um NumberSequence para determinar como o brilho da luz da lâmpada muda ao longo de sua vida, você deve determinar quanto tempo você deseja que o loop pisque. Em outras palavras, essa duração do loop essencialmente controla a frequência com que o NumberSequence se repete, em segundos.
Para criar uma duração de loop:
Adicione um novo atributo de duração de loop ao modelo da lâmpada.
Na janela Explorer , selecione o modelo da lâmpada.
Na janela Propriedades , navegue até a seção Atributos e clique no botão Adicionar Atributo . O diálogo Adicionar Atributo é exibido.
Na caixa de diálogo Adicionar Atributo ,
No campo Name , insira LoopDuration .
Clique no menu suspenso Digite e selecione Número .
Clique no botão Salvar . O novo atributo é exibido na seção Atributos da janela Propriedades .
Defina o novo atributo LoopDuration para 1 . Isso diz ao NumberSequence para repetir após um segundo.
Programando o piscar de luz
Agora que você tem todos os elementos para controlar o brilho da sua lâmpada ao longo de sua vida útil, é hora de criar um Script que fará com que tudo funcione em conjunto e piscará a luz.
Para programar o piscar de luz:
Na janela Explorer , passe o mouse sobre o modelo da lâmpada e clique no botão ⊕. Um menu contextual é exibido.
Do menu, insira um Script .
No novo script, digite o seguindo:
local RunService = game:GetService("RunService")
-- Obtém os valores do atributo definidos no modelo.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Armazena referências às instâncias do modelo que serão alteradas.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- Armazena os valores originais das propriedades que vão mudar.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Obtém o valor da sequência de números (ns) em um momento específico (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Se estivermos em 0 ou 1, retorna o valor do primeiro ou último ponto-chave, respectivamente.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- Caso contrário, passe por cada par sequencial de pontos-chave.
for i = 1, #ns.Keypoints - 1 do
-- Obtém o ponto-chave atual e o próximo.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Se nsTime estiver entre os tempos dos pontos-chave,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Calcula onde nsTime está entre os tempos dos pontos-chave, chama esse alpha.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Retorna o valor entre os pontos para nsTime usando alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Soluciona pelo tempo da Sequência de Números (entre 0 e 1).
local t = time() / loopDuration
local numberSequenceTime = t - math.floor(t)
-- Obtém o valor da sequência de números no momento.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Ajusta as propriedades de brilho e cor com base nesse valor.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
Quando você testou sua experiência, a função Heartbeat faz o seguinte a cada quadro:
Soluciona por um tempo (numberSequenceTime ) dentro do brightnessCurve``Datatype.NumberSequence com base no tempo atual.
O tempo está entre 0 e 1, pois representam o começo e o fim da sequência de números, respectivamente.
Soluciona o valor (brightnessValue ) do brightnessCurve``Datatype.NumberSequence no tempo numberSequenceTime.
evaluateNumberSequence() calcula o valor associado ao tempo para qualquer NumberSequence.
Este valor serve como um valor de brilho relativo para aplicar às propriedades que mudam ao longo do tempo.
Muda as propriedades das lâmpadas multiplicando brightnessValue pelo brilho da luz, brilho do feixe e cor da lâmpada.
As mudanças nessas propriedades ao longo do tempo resultam no efeito piscando abaixo.