Cahaya berkedip-cedik adalah kekuatan yang kuat dalam mengubah ton sebuah lingkungan. Misalnya, rumah dengan lampu terang konsisten dapat merasa hangat dan mengundang, tetapi jika Anda menambahkan cahaya berkedip-cedik ke koridor berandayang sama, itu menjadi menakutkan dan mungkin menunjukkan kemungkinan bahaya di de
Seperti dengan semua kreasi3D, ada banyak cara untuk mencapai tujuan khusus. Dalam panduan ini, Anda dapat dengan cepat membuat animasi cahaya berkedip menggunakan alat dan metode yang tersedia hanya di Studio dengan hanya beberapa aset dasar, termasuk file .rbxm untuk model lampu bankir yang dapat disesuaikan
Dalam metode berikut untuk membuat lampu berkedip, ikuti setiap bagian untuk belajar cara membuat:
- Kecerahan NumberSequence untuk mengubah kecerahan lampu secara bertahap.
- Attribut durasi loop untuk menentukan jumlah waktu setiap loop berkedip.
Mengimpor Lampir Sampel
Petunjuk ini menggunakan file .rbxm yang dapat diunduh dari model lampu bank berkualitas tinggi yang dapat disesuaikan untuk menunjukkan teknik cahaya berkedip. Anda dapat menggunakan model ini untuk memahami prinsip dasar, lalu menerapkannya ke model Anda sendiri yang Anda buat di Studio atau perangkat luncur pihak ketiga lainnya.
Untuk mengimpor BankersLamp.rbxm :
Di jendela Explorer , klik kanan Workspace . Sebuah menu konteks ditampilkan.
Pilih Masukkan dari File… Sebuah browser file.
Pilih BankersLamp .rbxm , lalu klik tombol Buka . Model ditampilkan dalam viewport.
Membuat Urutan Ke Cerahan
A NumberSequence adalah jenis data yang mewakili serangkaian nilai angka dari 0 hingga 1 selama masa hidup kejadian. Jenis data ini berguna untuk menciptakan lampu berkedip karena Anda dapat menentukan seberapa Anda ingin kelerahan lampu mengubah selama masa hidupnya, dan ketika Anda mengubah kecerahan dari intensitas p
The X axis of a NumberSequence represents time, and the Y axis represents relative brightness. Each square at the start and end of the number sequence is a keypoint that determines the value of the property at that point of the light brightness's lifetime. When you first create a Datatype
Sementara lampu tidak memiliki kecerahan NumberSequence secara default, Anda dapat menciptakan属性kecerahan, tetapkan ke ketikNumberSequence dan kemudian bereksperimen dengan menambahkan kepoin dengan nilai yang berbeda sampai lampu berkedip pada cadence Anda.
Untuk menciptakan kecerahan NumberSequence :
Tambahkan Attribute NumberSequential ke model lampu.
Di jendela Explorer , pilih model lampu.
Di jendela Properti , navigasikan ke bagian Attribut dan klik tombol Tambahkan Attribut . Dialog 1>Tambahkan Attribut1> ditampilkan.
Dalam Tambahkan Atribut dialog,
Di bidang Nama , masukkan BrightnessCurve .
Klik menu Jatuhkan , lalu pilih Nomor Urutan .
Klik tombol Simpan . Tombol baru muncul di bagian Attribut dari jendela Properti .
Pilih kebaruan BrightnessCurve property, lalu klik tombol … . A number sequence pop-up显示.
Lakukan salah satu dari berikut tindakan:
- Untuk mengubah kecerahan pada titik tertentu, klik pada keypoin dan geser ke atas atau ke bawah, atau masukkan nilai di bidang Nilai .
- Untuk menambahkan poin kunci baru, klik di titik mana pun di grafik.
- Untuk menghapus poin kunci, pilih poin kunci, lalu tombol Hapus .
- Untuk menambahkan rentang acak untuk kecerahan, klik di salah satu poin kunci dan seret garis lingkaran ke atas atau ke bawah. Pada saat itu, lampu menghasilkan di rentang acak antara amplop merah muda.
Misalnya, grafik berikut membuat lampu berkedip penuh kecerahan untuk lampu pertama, 50% kecerahan untuk lampu kedua, dan kemudian 75% kecerahan untuk lampu ketiga.
Membuat Durasi Loop
Sekarang Anda memiliki NumberSequence untuk menentukan bagaimana keliputan lampu berubah selama hidupnya, Anda harus menentukan berapa lama Anda ingin loop berkedip untuk diambil. Dengan kata lain, durasi loop ini pada dasarnya mengontrol seberapa sering NumberSequence diulang, dalam detik.
Untuk menciptakan durasi siklus:
Tambahkan attribute durasi loop baru ke model lampu.
Di jendela Explorer , pilih model lampu.
Di jendela Properti , navigasikan ke bagian Attribut dan klik tombol Tambahkan Attribut . Dialog 1>Tambahkan Attribut1> ditampilkan.
Dalam Tambahkan Atribut dialog,
Di Nama lapangan, masukkan LoopDuration .
Klik menu Jatuhkan , lalu pilih Nomor .
Klik tombol Simpan . Tombol baru muncul di bagian Attribut dari jendela Properti .
Tetapkan nilai baru LoopDuration ke 1 . Ini mengatakan kepada NumberSequence untuk mengulangi setelah satu detik.
Menggunakan Script Light Flicker
Sekarang Anda memiliki semua elemen untuk mengontrol kecerahan lampu Anda selama hidupnya, saatnya untuk membuat Script yang akan mengumpulkan semuanya dan berkedip cahaya.
Untuk menyalakan lampu berkedip:
- Di jendela Explorer , geser mouse atas model lampu dan klik tombol ⊕. Menu konteks ditampilkan.
- Dari menu, sisipkan Skrip .
- Dalam naskah baru, masukkan yang mengikuti:
local RunService = game:GetService("RunService")
-- Mendapatkan nilai属性 yang ditetapkan pada model.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Menyimpan referensi instans 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 asli proporsi yang akan berubah.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Mendapatkan nilai dari NumberSequencer (ns) pada waktu tertentu (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Jika kita berada di 0 atau 1, mengembalikan nilai keypoint 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 keypoin secara berurutan.
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 ndTime berada di antara waktu keypoint,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Menghitung di mana waktu nsTime berada di antara waktu keypoin, memanggil ini alpha.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Mengembalikan nilai antara poin untuk nnTime menggunakan alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Menyelesaikan waktu untuk NumberSequencer (antara 0 dan 1).
local t = time() / loopDuration
local numberSequenceTime = t - math.floor(t)
-- Mendapatkan nilai NumberSequencer saat ini.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Mengubah nilai 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 menguji pengalaman Anda, fungsi Heartbeat mengeksekusi setiap frame berikut:
- Menyelesaikan untuk waktu ( numberSequenceTime ) dalam brightnessCurve``Datatype.NumberSequence berdasarkan pada waktu saat ini.
- Waktu antara 0 dan 1 karena mereka mewakili awal dan akhir dari NumberSequencer, masing-masing.
- Menyelesaikan untuk nilai ( brightnessValue ) dari brightnessCurve``Datatype.NumberSequence pada saat 1> numberSequencerTime1> .
- evaluateNumberSequence() menghitung nilai yang dikaitkan dengan waktu untuk setiap NumberSequence .
- Nilai ini menyediakan nilai kecerahan relatif untuk diterapkan kepada proporsi yang berubah seiring waktu.
- Mengubah propinsi lampu dengan menggandakan brightnessValue oleh kecerahan cahaya, kecerahan sinar, dan warna bulb.
Perubahan ini pada property ini secara bertahap menyebabkan efek gesekan di bawah ini.