Luzes brilhantes é uma força poderosa na influência do tom de um ambiente. Por exemplo, uma casa com iluminação de uma consistência brilhante pode se sentir quente e convidativa, mas se você adicionar luzes brilhantes ao corredor de uma mesma início, ele se torna assombrador e pode sugerir perigo possível à frente. Ao modelar e scriptar de forma estratégica diferentes fontes de luz dentro de sua experiência, voc
Como com qualquer criações3D, existem muitas maneiras de alcançar qualquer metas específicas. Neste guia, você pode criar rapidamente uma animação de luz piscando usando ferramentas e métodos disponíveis apenas dentro do Studio com apenas alguns recursos básicos, incluindo um arquivo .rbxm para o modelo de lampada do banker que contém filhos Class.MeshParts
No seguinte método para criar luzes piscando, siga cada seção para aprender a Criar:
- Uma brilhantidade NumberSequence para influenciar a brilhantidade da lâmpada ao longo do tempo.
- Um atributo de duração de loop para determinar a quantidade de tempo que cada loop de piscar leva.
Importando a Lâmpada de Exemplo
Este guia usa um arquivo de baixar .rbxm de um modelo de lâmpada de alta qualidade, personalizável de um modelador de banqueiro de alta qualidade para mostrar 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 dentro do Studio ou de outro software de modelagem de terceiros.
Para importar o BankersLamp.rbxm :
Na janela Explorer , clique com o botão direito em Espaço de Trabalho . Um menu contextual é exibido.
Selecione Inserir do Arquivo... Um navegador de arquivos.
Selecione o BankersLamp .rbxm , então clique no botão Abrir . O modelo será exibido dentro da janela de visualização.
Criando uma Sequência de Brilho
Um NumberSequence é um tipo de dado que representa uma série de valores de número de 0 a 1 ao longo da vida de uma instância. Este tipo de dado é útil para criar luzes piscando porque você pode especificar como você deseja que a luz da lâmpada mude ao longo de sua vida, e quando você muda a brilhência de full intensity para não light at all em sucessão rápida, você pode criar
O eixo X de uma NumberSequence representa o tempo, e o eixo Y representa a intensidade de brilho relativo. Cada quadrado no começo e no fim da sequência de números é um keypoint que determina o valor da propriedade em um ponto de tempo.
Embora a lâmpada não tenha uma brilhança NumberSequence por padrão, você pode criar um atributo de brilhança, definir-o para um digitarNumberSequence e, em seguida, experimentar adicionando ponteiros com diferentes valores até que a luz brilhe na sua cadência de set.
Para criar uma luminosidade NumberSequence :
Adicione um novo atributo NumberSequência ao modelo de lâmpada.
Na janela Explorer , selecione o modelo de lâmpada.
Na janela Propriedades , navegue até a seção Atributos e clique no botão Adicionar Atributo . O diálogo 1>Adicionar Atributo1> será exibido.
Na caixa de diálogo Adicionar Atributo ,
No campo Nome , insira Curva de Brilho .
Clique no menu suspenso Tipo e selecione Sequência de Números .
Clique no botão Salvar . O novo atributo será exibido na seção Atributos da janela Propriedades .
Selecione a nova propriedade Curva de Brilho , então clique no botão … . Uma sequência de números será exibida.
Realize uma das seguintes ações:
- Para alterar a brilhança em um ponto, clique em um ponto de interrupção e arraste-o para cima ou para baixo, ou insira um valor no campo Valor .
- Para inserir novos pontos de acesso, clique em qualquer ponto no gráfico.
- Para excluir um ponto de chave, selecione o ponto de chave, então o botão Excluir .
- Para adicionar um alcance aleatório para a brilhança, clique em qualquer ponto de chave e arraste as linhas de envoltura para cima ou para baixo. Naquele momento, a luz gera uma brilhança aleatória entre o contorno rosa.
Por exemplo, o seguinte gráfico faz com que o piscar fique cheio de brilho para o primeiro piscar, 50% de brilho para o segundo piscar e, em seguida, 75% de brilho para o terceiro piscar.
Criando uma Duração de Loop
Agora que você tem um NumberSequence para determinar como a luz da lâmpada muda ao longo de sua vida útil, você deve determinar o tempo que você deseja que o loop de clique leve. Em outras palavras, essa duração do loop controla essencialmente a frequência com que o NumberSequence é repetido, em segundos.
Para criar uma duração de loop:
Adicione um novo atributo de duração de loop ao modelo de lâmpada.
Na janela Explorer , selecione o modelo de lâmpada.
Na janela Propriedades , navegue até a seção Atributos e clique no botão Adicionar Atributo . O diálogo 1>Adicionar Atributo1> será exibido.
Na caixa de diálogo Adicionar Atributo ,
No campo Nome , insira LoopDuration .
Clique no menu suspenso Tipo , então selecione Número .
Clique no botão Salvar . O novo atributo será exibido na seção Atributos da janela Propriedades .
Defina o novo atributo LoopDuration para 1 . Isso diz ao atributo NumberSequence para repetir depois de um segundo.
Programando o Brilho da Tela
Agora que você tem todos os elementos para controlar a brilhência de sua lâmpada ao longo de sua vida útil, é hora de criar um Script que vai fazer tudo funcionar juntos e fazer o luz piscar.
Para scriptar o brilho da luz:
- Na janela Explorer , passe o mouse sobre o modelo de lâmpada e clique no botão ⊕. Um menu contextual será exibido.
- Do menu, insira um Script .
- No novo script, insira o seguindo:
local RunService = game:GetService("RunService")
-- Obtém os valores de 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 mudarão.
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 mudarão.
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 tempo específico (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Se estivermos em 0 ou 1, retornamos o valor do primeiro ou último ponto de 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, itens através de cada par de pares de chaves.
for i = 1, #ns.Keypoints - 1 do
-- Obtém o ponto de chave atual e 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 oNSTime está entre os tempos dos picos de tempo, chama isso de alfa.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Retorna o valor entre os pontos por nsTime usando alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Resolve o tempo da NumberSequência (entre 0 e 1).
local t = time() / loopDuration
local numberSequenceTime = t - math.floor(t)
-- Obtém o valor da Sequência de Números neste momento.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Ajusta a propriedade de brilho e cor com base neste 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ê testa sua experiência, a função Heartbeat executa o seguinte a cada quadro:
- Soluciona por um tempo ( numberSequenceTime ) dentro do brightnessCurve baseado no tempo atual.
- O tempo está entre 0 e 1, pois estes representam o início e o fim da Sequência de Números, respectivamente.
- Soluciona para o valor ( brightnessValue ) da brightnessCurve``Datatype.NumberSequence em tempo 1> numberSequênciaTime1> .
- 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 ao multiplicar brightnessValue pela brilhança da lâmpada, pela beleza do feixe e pela cor da lâmpada.
As alterações nessas propriedades ao longo do tempo resultam no efeito de brilho abaixo.