Lampu berkedip adalah kekuatan yang kuat dalam mempengaruhi suasana sebuah lingkungan. Misalnya, sebuah rumah dengan pencahayaan yang konsisten dapat terasa hangat dan mengundang, tetapi jika Anda menambahkan lampu berkedip di lorong rumah yang sama, itu menjadi menghantui dan mungkin menyiratkan kemungkinan bahaya di depan. Dengan secara strategis memodelkan dan memprogram berbagai sumber cahaya dalam pengalaman Anda, Anda dapat menambahkan level baru dalam storytelling lingkungan Anda.
Seperti semua pembuatan 3D, ada banyak cara untuk mencapai tujuan tertentu. Dalam panduan ini, Anda dapat dengan cepat membuat animasi lampu berkedip menggunakan alat dan metode yang hanya tersedia di dalam Studio dengan hanya beberapa aset dasar, termasuk file .rbxm untuk model lampu bankir yang berisi anak Class.MeshParts yang dapat Anda sesuaikan agar sesuai dengan estetika pengalaman Anda sendiri.
Dalam metode berikut untuk membuat lampu berkedip, ikuti setiap bagian untuk mempelajari cara membuat:
- Sebuah NumberSequence kecerahan untuk mempengaruhi kecerahan lampu dari waktu ke waktu.
- Sebuah atribut durasi loop untuk menentukan berapa lama setiap loop kedip harus berlangsung.
Impor lampu contoh
Panduan ini menggunakan file .rbxm yang dapat diunduh dari model lampu bankir yang dapat disesuaikan dengan kualitas tinggi untuk mendemonstrasikan teknik lampu berkedip. Anda dapat menggunakan model ini untuk memahami prinsip dasar, lalu menerapkannya pada model Anda sendiri yang Anda buat di dalam Studio atau perangkat lunak pemodelan pihak ketiga lainnya.
Untuk mengimpor BankersLamp .rbxm:
Di jendela Explorer, klik kanan Workspace. Menu kontekstual ditampilkan.
Pilih Insert From File… Sebuah browser file ditampilkan.
Pilih BankersLamp .rbxm, lalu klik tombol Open. Model ditampilkan dalam viewport.

Buat sebuah NumberSequence kecerahan
Sebuah NumberSequence adalah tipe data yang mewakili serangkaian nilai angka dari 0 hingga 1 selama masa hidup instance. Tipe data ini berguna untuk membuat lampu berkedip karena Anda dapat menentukan bagaimana Anda ingin kecerahan cahaya lampu berubah selama masa hidupnya, dan ketika Anda mengubah kecerahan dari intensitas penuh hingga tanpa cahaya sama sekali dalam urutan yang singkat, Anda dapat mencapai efek berkedip.
Sumbu X dari NumberSequence mewakili waktu, dan sumbu Y mewakili kecerahan relatif. Setiap titik persegi di awal dan akhir urutan angka adalah titik kunci yang menentukan nilai dari properti pada titik kecerahan lampu ini. Ketika Anda pertama kali membuat NumberSequence, grafiknya adalah garis lurus dan cahaya tetap memiliki intensitas kecerahan yang sama sepanjang masa hidupnya, tetapi dengan menambahkan dan memindahkan titik kunci, Anda dapat membuat kurva dalam urutan dan mengubah kecerahan lampu dari waktu ke waktu.

Meskipun lampu tidak memiliki NumberSequence kecerahan secara default, Anda dapat membuat atribut kecerahan, mengatur tipe menjadi NumberSequence, kemudian bereksperimen dengan menambahkan titik kunci dengan nilai yang berbeda hingga lampu berkedip pada irama yang Anda tentukan.
Untuk membuat NumberSequence kecerahan:
Tambahkan atribut NumberSequence baru ke model lampu.
Di jendela Explorer, pilih model lampu.
Di jendela Properties, navigasikan ke bagian Attributes dan klik tombol Add Attribute. Dialog Add Attribute ditampilkan.
Di dialog Add Attribute,
Di kolom Name, masukkan BrightnessCurve.
Klik menu dropdown Type, lalu pilih NumberSequence.
Klik tombol Save. Atribut baru ditampilkan di bagian Attributes dari jendela Properties.

Pilih properti BrightnessCurve yang baru, lalu klik tombol …. Sebuah pop-up urutan angka ditampilkan.

Lakukan salah satu tindakan berikut:
- Untuk mengubah kecerahan pada titik tertentu, klik pada titik kunci dan seret ke atas atau ke bawah, atau masukkan nilai di kolom Value.
- Untuk memasukkan titik kunci baru, klik pada titik mana saja di grafik.
- Untuk menghapus sebuah titik kunci, pilih titik kunci tersebut, lalu klik tombol Delete.
- Untuk menambahkan rentang acak untuk kecerahan, klik pada titik kunci mana saja dan seret garis amplop ke atas atau ke bawah. Pada saat itu, cahaya akan dihasilkan dengan kecerahan secara acak antara amplop merah muda.
Sebagai contoh, grafik berikut membuat cahaya berkedip ke kecerahan penuh untuk kedipan pertama, kecerahan 50% untuk kedipan kedua, dan kecerahan 75% untuk kedipan ketiga.

Buat durasi loop
Sekarang setelah Anda memiliki NumberSequence untuk menentukan bagaimana kecerahan lampu berubah selama masa hidupnya, Anda harus menentukan berapa lama Anda ingin loop berkedip berlangsung. Dengan kata lain, durasi loop ini pada dasarnya mengontrol seberapa sering NumberSequence diulang, dalam detik.
Untuk membuat durasi loop:
Tambahkan atribut durasi loop baru ke model lampu.
Di jendela Explorer, pilih model lampu.
Di jendela Properties, navigasikan ke bagian Attributes dan klik tombol Add Attribute. Dialog Add Attribute ditampilkan.
Di dialog Add Attribute,
Di kolom Name, masukkan LoopDuration.
Klik menu dropdown Type, lalu pilih Number.
Klik tombol Save. Atribut baru ditampilkan di bagian Attributes dari jendela Properties.

Atur atribut LoopDuration yang baru menjadi 1. Ini memberi tahu NumberSequence untuk mengulang setelah satu detik.
Skrip kedipan lampu
Sekarang Anda memiliki semua elemen untuk mengontrol kecerahan lampu Anda selama masa hidupnya, saatnya untuk membuat Script yang akan membuat semuanya bekerja sama dan membuat cahaya berkedip.
Untuk menyusun kedipan cahaya:
- Di jendela Explorer, arahkan kursor ke model lampu dan klik tombol ⊕. Menu kontekstual ditampilkan.
- Dari menu, masukkan sebuah Script.
- Di skrip baru, masukkan yang berikut:
local RunService = game:GetService("RunService")
-- Mendapatkan nilai atribut yang diatur pada model.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Menyimpan referensi ke instance model yang akan berubah.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- Menyimpan nilai properti asli yang akan berubah.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Mendapatkan nilai dari NumberSequence (ns) pada waktu tertentu (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Jika kita berada di 0 atau 1, mengembalikan nilai titik kunci pertama atau terakhir, masing-masing.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- Jika tidak, langkah melalui setiap pasangan berturut-turut dari titik kunci.
for i = 1, #ns.Keypoints - 1 do
-- Mendapatkan titik kunci saat ini dan berikutnya.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Jika nsTime berada di antara waktu titik kunci,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Menghitung di mana nsTime terletak di antara waktu titik kunci, menyebut ini alpha.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Mengembalikan nilai antara titik untuk nsTime menggunakan alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Menyelesaikan waktu NumberSequence (antara 0 dan 1).
local t = time() / loopDuration
local numberSequenceTime = t - (t // 1)
-- Mendapatkan nilai NumberSequence pada waktu ini.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Mengubah properti kecerahan dan warna berdasarkan nilai ini.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
Ketika Anda mengujicoba pengalaman Anda, koneksi acara Heartbeat mengeksekusi yang berikut setiap frame:
- Menyelesaikan waktu (numberSequenceTime) dalam brightnessCurve NumberSequence berdasarkan waktu saat ini.
- Waktu tersebut berada di antara 0 dan 1 karena ini mewakili awal dan akhir dari NumberSequence, masing-masing.
- Menyelesaikan nilai (brightnessValue) dari brightnessCurve NumberSequence pada waktu numberSequenceTime.
- evaluateNumberSequence() menghitung nilai yang terkait dengan waktu untuk setiap NumberSequence.
- Nilai ini berfungsi sebagai nilai kecerahan relatif yang diterapkan pada properti yang berubah seiring waktu.
- Mengubah properti lampu dengan mengalikan brightnessValue dengan kecerahan lampu, kecerahan beam, dan warna bola lampu.
Perubahan pada properti ini seiring waktu menghasilkan efek kedip seperti di bawah ini.