Tworzenie migoczącego światła

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Migoczące światła to potężny środek wpływający na ton otoczenia. Na przykład, dom z oświetleniem o stałej jasności może wydawać się ciepły i zapraszający, ale jeśli dodasz migoczące światła do korytarza tego samego domu, staje się on mroczny i może sugerować możliwe niebezpieczeństwo. Poprzez strategiczne modelowanie i skryptowanie różnych źródeł światła w twoim doświadczeniu, możesz dodać zupełnie nowy poziom do swojego opowiadania w środowisku.

Jak w przypadku każdej twórczości 3D, istnieje wiele sposobów na osiągnięcie konkretnego celu. W tym przewodniku możesz szybko stworzyć animację migoczącego światła, używając narzędzi i metod dostępnych tylko w Studio, z jedynie kilkoma podstawowymi zasobami, w tym plikiem .rbxm dla modelu lampy bankowej, który zawiera podrzędne Class.MeshParts, które możesz dostosować do estetyki swoich własnych doświadczeń.

W poniższej metodzie tworzenia migoczących świateł, postępuj zgodnie z każdą sekcją, aby nauczyć się, jak stworzyć:

  • NumberSequence dla jasności, aby wpływać na jasność lampy w czasie.
  • Atrybut czasu trwania pętli, aby określić, ile czasu każda pętla migotania musi trwać.
  • Script, który konfiguruje, jak te dwa atrybuty współpracują z podrzędnymi MeshParts modelu, aby migotać światłem lampy.

Importuj przykładową lampę

Ten przewodnik używa pliku .rbxm do pobrania, wysokiej jakości, dostosowywalnego modelu lampy bankowej, aby zademonstrować technikę migoczącego światła. Możesz użyć tego modelu, aby zrozumieć podstawowe zasady, a następnie zastosować je do własnych modeli, które stworzysz w Studio lub innych narzędziach do modelowania.

Aby zaimportować BankersLamp .rbxm:

  1. W oknie Eksploratora kliknij prawym przyciskiem myszy Workspace. Wyświetli się menu kontekstowe.

  2. Wybierz Wstaw z pliku… Wyświetli się przeglądarka plików.

  3. Wybierz .rbxm BankersLamp, a następnie kliknij przycisk Otwórz. Model wyświetli się w widoku.

Stwórz jasność NumberSequence

NumberSequence to typ danych, który reprezentuje serię wartości liczbowych od 0 do 1 przez całe życie instancji. Ten typ danych jest przydatny do tworzenia migoczących świateł, ponieważ możesz określić, jak chcesz, aby jasność światła lampy zmieniała się w czasie, a gdy zmieniasz jasność z pełnej intensywności na całkowity brak światła w krótkich odstępach czasu, możesz uzyskać efekt migotania.

Oś X NumberSequence reprezentuje czas, a oś Y reprezentuje względną jasność. Każdy kwadrat na początku i na końcu sekwencji liczbowej to punkt kluczowy, który określa wartość właściwości w danym punkcie życia jasności światła. Kiedy tworzysz NumberSequence, wykres jest prostą linią, a światło utrzymuje tę samą intensywność jasności przez całe jego życie, ale poprzez dodawanie i przesuwanie punktów kluczowych, możesz tworzyć krzywe w sekwencji i zmieniać jasność lampy w czasie.

Chociaż lampa nie ma domyślnie NumberSequence dla jasności, możesz stworzyć atrybut jasności, ustawić go na typ NumberSequence, a następnie eksperymentować, dodając punkty kluczowe o różnych wartościach, aż światło będzie migotać w twoim ustawionym rytmie.

Aby stworzyć NumberSequence dla jasności:

  1. Dodaj nowy atrybut NumberSequence do modelu lampy.

    1. W oknie Eksploratora wybierz model lampy.

    2. W oknie Właściwości przejdź do sekcji Atrybuty i kliknij przycisk Dodaj atrybut. Wyświetli się okno dialogowe Dodaj atrybut.

    3. W oknie dialogowym Dodaj atrybut,

      1. W polu Nazwa wpisz BrightnessCurve.

      2. Kliknij rozwijane menu Typ, a następnie wybierz NumberSequence.

      3. Kliknij przycisk Zapisz. Nowy atrybut wyświetli się w sekcji Atrybuty okna Właściwości.

  2. Wybierz nową właściwość BrightnessCurve, a następnie kliknij przycisk . Wyświetli się wyskakujące okno sekwencji liczbowej.

  3. Wykonaj jedną z poniższych czynności:

    • Aby zmienić jasność w punkcie, kliknij punkt kluczowy i przesuń go w górę lub w dół, lub wpisz wartość w polu Wartość.
    • Aby wstawić nowe punkty kluczowe, kliknij dowolny punkt na wykresie.
    • Aby usunąć punkt kluczowy, wybierz punkt kluczowy, a następnie kliknij przycisk Usuń.
    • Aby dodać losowy zakres dla jasności, kliknij dowolny punkt kluczowy i przesuń linie otaczające w górę lub w dół. W tym momencie światło generuje losową jasność między różowym otoczeniem.

Na przykład, poniższy wykres sprawia, że światło migocze do pełnej jasności przy pierwszym migotaniu, 50% jasności przy drugim migotaniu, a następnie 75% jasności przy trzecim migotaniu.

Stwórz czas trwania pętli

Teraz, gdy masz NumberSequence, aby określić, jak zmienia się jasność lampy w jej życiu, musisz określić, jak długo chcesz, aby pętla migotania trwała. Innymi słowy, ten czas trwania pętli kontroluje, jak często NumberSequence się powtarza, w sekundach.

Aby stworzyć czas trwania pętli:

  1. Dodaj nowy atrybut czasu trwania pętli do modelu lampy.

    1. W oknie Eksploratora wybierz model lampy.

    2. W oknie Właściwości przejdź do sekcji Atrybuty i kliknij przycisk Dodaj atrybut. Wyświetli się okno dialogowe Dodaj atrybut.

    3. W oknie dialogowym Dodaj atrybut,

      1. W polu Nazwa wpisz LoopDuration.

      2. Kliknij rozwijane menu Typ, a następnie wybierz Number.

      3. Kliknij przycisk Zapisz. Nowy atrybut wyświetli się w sekcji Atrybuty okna Właściwości.

  2. Ustaw nowy atrybut LoopDuration na 1. To informuje NumberSequence, aby powtarzał się po jednej sekundzie.

Scripting migotania światła

Teraz, gdy masz wszystkie elementy do kontrolowania jasności lampy przez jej życie, czas stworzyć Script, który sprawi, że wszystko będzie działać razem i migotać światłem.

Aby napisać skrypt migotania światła:

  1. W oknie Eksploratora najedź na model lampy i kliknij przycisk ⊕. Wyświetli się menu kontekstowe.
  2. Z menu wstaw Skrypt.
  3. W nowym skrypcie wprowadź następujący kod:

local RunService = game:GetService("RunService")
-- Pobiera wartości atrybutów ustawione na modelu.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Przechowuje referencje do instancji modelu, które będą się zmieniać.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- Przechowuje oryginalne wartości właściwości, które będą się zmieniać.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Pobiera wartość NumberSequence (ns) w określonym czasie (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Jeśli jesteśmy na 0 lub 1, zwraca wartość pierwszego lub ostatniego punktu kluczowego.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- W przeciwnym razie przechodzi przez każdą parę punktów kluczowych.
for i = 1, #ns.Keypoints - 1 do
-- Pobiera aktualny i następny punkt kluczowy.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Jeśli nsTime leży między czasami punktów kluczowych,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Oblicza, gdzie nsTime leży pomiędzy czasami punktów kluczowych, nazywając to alpha.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Zwraca wartość między punktami dla nsTime, używając alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Oblicza czas sekwencji liczbowej (pomiędzy 0 a 1).
local t = time() / loopDuration
local numberSequenceTime = t - (t // 1)
-- Pobiera wartość sekwencji liczbowej w tym czasie.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Dostosowuje właściwości jasności i koloru na podstawie tej wartości.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)

Kiedy testujesz swoje doświadczenie, połączenie zdarzenia Heartbeat wykonuje następujące czynności w każdej klatce:

  1. Oblicza czas (numberSequenceTime) w ramach brightnessCurve NumberSequence w zależności od bieżącego czasu.
    • Czas jest pomiędzy 0 a 1, ponieważ reprezentują one początek i koniec NumberSequence, odpowiednio.
  2. Oblicza wartość (brightnessValue) brightnessCurve NumberSequence w czasie numberSequenceTime.
    • evaluateNumberSequence() oblicza wartość skojarzoną z czasem dla każdej NumberSequence.
    • Ta wartość służy jako względna wartość jasności, którą zastosuje się do właściwości zmieniających się w czasie.
  3. Zmienia właściwości lampy przez mnożenie brightnessValue przez jasność światła, jasność promienia i kolor żarówki.

Zmiany tych właściwości w czasie skutkują efektem migotania, który możesz zobaczyć poniżej.

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.