Yanıp sönen ışıklar, bir ortamın tonunu etkilemede güçlü bir etkendir. Örneğin, sürekli bir parlaklığa sahip bir aydınlatma ile döşenmiş bir ev sıcak ve davetkar hissedebilir, ancak aynı evin koridoruna yanıp sönen ışıklar eklediğinizde, ortam ürkütücü hale gelir ve muhtemel bir tehlikenin habercisi olabilir. Deneyiminiz içinde çeşitli ışık kaynaklarını stratejik olarak modelleyerek ve betimleyerek, çevresel hikaye anlatımınıza tamamen yeni bir boyut katabilirsiniz.
Tüm 3D yaratımda olduğu gibi, belirli bir hedefe ulaşmanın birçok farklı yolu vardır. Bu kılavuzda, yalnızca birkaç temel varlık kullanarak, Stüdyo içinde yalnızca mevcut araçlar ve yöntemlerle yanıp sönen bir ışık animasyonu hızlı bir şekilde oluşturabilirsiniz; bunlar arasında kendi deneyimlerinize uyacak şekilde özelleştirebileceğiniz Class.MeshParts içeren bir bankerin lambası modeli için .rbxm dosyası yer almaktadır.
Yanıp sönen ışıkları oluşturmak için aşağıdaki yöntemleri izleyin:
- Lambanın parlaklığını zamanla etkileyecek bir parlaklık NumberSequence.
- Her yanıp sönme döngüsünün ne kadar süre alacağını belirleyen bir döngü süresi özniteliği.
Örnek lambayı içe aktar
Bu kılavuz, yanıp sönen bir ışık tekniğini göstermek için yüksek kaliteli, özelleştirilebilir bir bankerin lambası modelinin indirilebilir .rbxm dosyasını kullanır. Bu modeli temel ilkeleri anlamak için kullanabilir ve ardından bunları Stüdyo içinde veya diğer üçüncü taraf modelleme yazılımlarında oluşturduğunuz kendi modellerinize uygulayabilirsiniz.
BankersLamp .rbxm dosyasını içe aktarmak için:
Explorer penceresinde, Workspace üzerinde sağ tıklayın. Bir bağlam menüsü görüntülenir.
Insert From File… seçeneğini seçin. Bir dosya tarayıcı görüntülenir.
BankersLamp .rbxm dosyasını seçin, ardından Aç butonuna tıklayın. Model görüntü penceresinde görüntülenir.

Bir parlaklık NumberSequence oluştur
Bir NumberSequence, bir nesnenin ömrü boyunca 0 ile 1 arasında bir dizi sayı değerini temsil eden bir veri türüdür. Bu tür veri, yanıp sönen ışıklar oluşturmak için yararlıdır çünkü lambanın ışığının ömrü boyunca nasıl değişmesini istediğinizi belirtebilirsiniz ve parlaklığı tam yoğunluktan tamamen ışık olmaya kısa peş peşe geçişlerle değiştirdiğinizde yanıp sönme etkisi elde edebilirsiniz.
Bir NumberSequence'ın X ekseni zamanı, Y ekseni ise göreceli parlaklığı temsil eder. Sayı dizisinin başlangıcındaki ve sonundaki her kare, ışık parlaklığının ömründeki o noktadaki özelliğin değerini belirten bir anahtar noktadır. Bir NumberSequence oluşturduğunuzda, grafik düz bir çizgi olup ışık ömrü boyunca aynı parlaklık yoğunluğunda kalır, ancak anahtar noktalar ekleyip hareket ettirerek dizide eğriler oluşturabilir ve lambanın parlaklığını zamanla değiştirebilirsiniz.

Lamba, varsayılan olarak bir parlaklık NumberSequence'a sahip olmasa da, bir parlaklık özniteliği oluşturabilir, onu NumberSequence türüne ayarlayabilir ve ışığın yanıp sönmesi için istediğiniz ritimde yanıp sönmesi için farklı değerlerle anahtar noktalar ekleyerek deneyebilirsiniz.
Bir parlaklık NumberSequence oluşturmak için:
Lamba modeline yeni bir NumberSequence özniteliği ekleyin.
Explorer penceresinde, lamba modelini seçin.
Properties penceresinde, Attributes bölümüne gidin ve Add Attribute butonuna tıklayın. Add Attribute diyaloğu görüntülenir.
Add Attribute diyaloğunda,
Name alanına BrightnessCurve yazın.
Type açılır menüsüne tıklayın ve NumberSequence seçeneğini belirleyin.
Save butonuna tıklayın. Yeni öznitelik, Properties penceresinin Attributes bölümünde görüntülenir.

Yeni BrightnessCurve özelliğini seçin, ardından … butonuna tıklayın. Bir sayı dizisi açılır penceresi görüntülenir.

Aşağıdaki işlemlerden birini gerçekleştirin:
- Bir noktada parlaklığı değiştirmek için, bir anahtar noktaya tıklayın ve yukarı veya aşağı sürükleyin ya da Value alanına bir değer girin.
- Yeni anahtar noktalar eklemek için, grafikte istediğiniz bir noktaya tıklayın.
- Bir anahtar noktayı silmek için, anahtar noktayı seçin ve ardından Delete butonuna tıklayın.
- Parlaklık için rastgele bir aralık eklemek için, herhangi bir anahtar noktaya tıklayın ve zarf çizgilerini yukarı veya aşağı sürükleyin. Bu esnada, ışık pembe zarf arasında rastgele bir parlaklık oluşturur.
Örneğin, aşağıdaki grafik ışığın ilk yanıp sönmesinde tam parlaklığa, ikinci yanıp sönmesinde %50 parlaklığa, üçüncü yanıp sönmesinde ise %75 parlaklığa ulaşmasını sağlar.

Bir döngü süresi oluştur
Artık lamba ışığının parlaklığının ömrü boyunca nasıl değiştiğini belirlemek için bir NumberSequence'a sahip olduğunuza göre, yanıp sönme döngüsünün ne kadar sürmesi gerektiğini belirlemeniz gerekir. Diğer bir deyişle, bu döngü süresi esasen NumberSequence'ın tekrar etme sıklığını, saniye cinsinden kontrol eder.
Bir döngü süresi oluşturmak için:
Lamba modeline yeni bir döngü süresi özniteliği ekleyin.
Explorer penceresinde, lamba modelini seçin.
Properties penceresinde, Attributes bölümüne gidin ve Add Attribute butonuna tıklayın. Add Attribute diyaloğu görüntülenir.
Add Attribute diyaloğunda,
Name alanına LoopDuration yazın.
Type açılır menüsüne tıklayın ve Number seçeneğini belirleyin.
Save butonuna tıklayın. Yeni öznitelik, Properties penceresinin Attributes bölümünde görüntülenir.

Yeni LoopDuration özniteliğini 1 olarak ayarlayın. Bu, NumberSequence'ın bir saniye sonra tekrar etmesini sağlar.
Işığın yanıp sönmesini betimle
Artık lambanızın parlaklığını kontrol etmek için tüm unsurlara sahip olduğunuza göre, tüm her şeyi bir araya getirip ışığı yanıp sönmek için çalıştıracak bir Script oluşturma zamanı geldi.
Işığın yanıp sönmesini betimlemek için:
- Explorer penceresinde, lamba modeline gelin ve üzerine gelerek ⊕ butonuna tıklayın. Bir bağlam menüsü görüntülenir.
- Menüsü içinden bir Script ekleyin.
- Yeni betikte aşağıdakileri girin:
local RunService = game:GetService("RunService")
-- Model üzerinde ayarlanan öznitelik değerlerini alır.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Değişecek model örneklerine referansları saklar.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- Değişecek özelliklerin orijinal değerlerini saklar.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Belirli bir zamanda NumberSequence'in (ns) değerini alır.
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- ns zamanında 0 veya 1 isek, sırasıyla ilk veya son anahtar noktanın değerini döner.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- Aksi takdirde, her ardışık anahtar noktaları arasında adım atar.
for i = 1, #ns.Keypoints - 1 do
-- Mevcut ve sonraki anahtar noktanın değerlerini alır.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Eğer nsTime anahtar noktalarının zamanları arasında ise,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- nsTime'ın anahtar noktalarının zamanları arasındaki yerini hesaplar, buna alpha deriz.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- nsTime için noktalar arasındaki değeri alpha kullanarak döner.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- NumberSequence'in zamanını (0 ile 1 arasında) çözer.
local t = time() / loopDuration
local numberSequenceTime = t - (t // 1)
-- Bu zamanda NumberSequence'in değerini alır.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Bu değere göre parlaklık ve renk özelliklerini ayarlar.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
Deneyiminizi oyun testine açtığınızda, Heartbeat olay bağlantısı her karede aşağıdakileri yürütür:
- Mevcut zamana dayalı olarak brightnessCurve NumberSequence içinde bir zaman (numberSequenceTime) çözer.
- Zaman, 0 ile 1 arasında olup, bu da NumberSequence'in başlangıcını ve sonunu temsil eder.
- numberSequenceTime zamanında brightnessCurve NumberSequence'ın değerini çözer (brightnessValue).
- evaluateNumberSequence() her NumberSequence için zamanı ile ilişkili değeri hesaplar.
- Bu değer, zamanla değişen özelliklere uygulanacak göreceli bir parlaklık değeri olarak hizmet eder.
- Işıkların özelliklerini brightnessValue'ı ışığın parlaklığı, beam'in parlaklığı ve ampulün rengi ile çarparak değiştirir.
Zamanla bu özelliklerdeki değişiklikler aşağıdaki yanıp sönme etkisini oluşturur.