แสงระยิบระยับ เป็นสứcแรงที่มีประสิทธิภาพในการส่งผลต่อสภาพเสียงของสภาพแวดล้อม ตัวอย่างเช่น บ้านที่มีแสงสว่างอย่างสม่ำเสมอสามารถ
การสร้างสรรค์3D ทั้งหมด มีหลายวิธีในการบรรลุเป้าหมายใด ๆ โดยเฉพาะ ในคู่มือนี้ คุณสามารถสร้างแอนิเมชันไฟรีโดยใช้เครื่องมื
ในวิธีต่อไปนี้เพื่อสร้างแสงระยิบระยับให้ทำตามแต่ละส่วนเพื่อเรียนรู้วิธีการสร้าง:
- ความสว่าง NumberSequence เพื่อส่งผลกระทบต่อความสว่างของโคมไฟในเวลาต่อมา
- ค่าความยาวของสถานะเวลาที่เปิดติดของแต่ละสเต็ป
การนำตัวอย่างแสงเข้ามา
คู่มือนี้ใช้ไฟล์ .rbxm ที่ดาวน์โหลดได้ของแบงก์เกอร์แบบตัวอย่างแสงที่ประกายไฟ เพื่อแสดงให้เห็นเทคนิคการเปิดเปิดแสง คุณสามารถใช้รุ่นนี้เพื่อเข้าใจหลักการพ
เพื่อนำ BankersLamp.rbxm เข้ามา:
ใน หน้าต่าง Explorer รุ่น Workspace จะแสดงรายการ上下文菜单.
เลือก ใส่จากไฟล์… ตัวเลือกเบราว์ไฟล์
เลือก BankersLamp .rbxm แล้วคลิกปุ่ม เปิด ตัวแบบจะปรากฏในหน้าต่าง โมเดลจะแสดงในหน้าต่าง
การสร้างตัวเลขความสว่าง
A NumberSequence เป็นรูปแบบข้อมูลที่表示一系列从 0 ถึง 1 อินสแตนซ์รูปแบบข้อมูลนี้มีประโยชน์สำหรับการสร้างแสงระยิบระยับเพราะคุณสามา
แกน X ของ NumberSequence เป็นเวลา และแกน Y เป็นความสว่างเฉลี่ย แต่ละตารางในต้นสายการเปลี่ยนแ
ในขณะที่โคมไฟไม่มีความสว่าง NumberSequence โดยปกติคุณสามารถสร้างค่าความสว่างได้โดยการตั้งค่าให้เป็น NumberSequence พิมพ์, จากนั้นคุณสามารถทดลองโดยการเพิ่
เพื่อสร้างความสว่าง NumberSequence :
เพิ่มค่าตัวละคร NumberSequencer ให้กับโมเดลโคมไฟ
ใน หน้าต่าง Explorer เลือกแบบโคมไฟ
ในหน้าต่าง โปรพีเพอร์ตี้ ไปที่ส่วน คุณลักษณะ และคลิกปุ่ม เพิ่มคุณลักษณะ ประกาศบนหน้า 1>เพิ่มคุณลักษณะ1> จะปรากฏขึ้น
ใน กระทู้เพิ่มลักษณะ โดย
- ในฟิลด์ ชื่อ ใส่ BrightnessCurve 2. คลิกเมนู พิมพ์ แล้วเลือก ตัวอักษร 3. คลิกปุ่ม บันทึก ใหม่. สัญลักษณ์ใหม่จะปรากฏในส่วน คุณลักษณะ ของ หน้าต่างโปรพีเพรตี้
เลือกสมบัติภาพใหม่ BrightnessCurve แล้วคลิกปุ่ม … ตัวเลขจะปรากฏขึ้น
ทำหนึ่งในสามารถกระทําต่อไปนี้:
- เพื่อเปลี่ยนความสว่างในจุดหนึ่ง, คลิกที่จุดสว่างและลากมันขึ้นหรือลง, หรือใส่ค่าในสาขา มูลค่า * เพื่อใส่จุดสำคัญใหม่ให้คลิกที่จุดใดในกราฟิก
- เพื่อลบจุดสัญลักษณ์ เลือกจุดสัญลักษณ์แล้วปุ่ม ลบ * เพื่อเพิ่มระยะสี่สุดสำหรับความสว่าง คลิกที่ด่านอะไหนก็ได้และลากเส้นสี่เหนี่ยวขึ้นหรือลง ในเวลานั้นไฟจะสร้างขึ้นในความสว่างแบบสุ่มระหว่างเหลี่ยมสีชมพู
ตัวอย่างเช่น กราฟิกต่อไปนี้ทำให้แสงระยิบระยับเป็นสีสันสูงสุดสำหรับแสงระยิบระยับแรก 50% แสงระยิบระยับที่สอง แล้ว 75% แสงระยิบระยับสำหรับแสงระยิบระยับที่สาม
การสร้างระยะเวลาของห่วงโซ่
ตอนนี้คุณมี NumberSequence เพื่อกำหนดว่าความสว่างของโคมไฟเปลี่ยนแปลงในช่วงชีวิตของมันได้อย่างไร คุณต้องกำหนดว่าคุณต้องการให้สปริงโคลนนี้เป็นเวลาเท่าไห
เพื่อสร้างระยะเวลาของวงจร:
เพิ่มค่าความยืนยาวของวงแหวนใหม่ให้แก่แบบโคมไฟ
ใน หน้าต่าง Explorer เลือกแบบโคมไฟ
ในหน้าต่าง โปรพีเพอร์ตี้ ไปที่ส่วน คุณลักษณะ และคลิกปุ่ม เพิ่มคุณลักษณะ ประกาศบนหน้า 1>เพิ่มคุณลักษณะ1> จะปรากฏขึ้น
ใน กระทู้เพิ่มลักษณะ โดย
- ในฟิลด์ ชื่อ ใส่ LoopDuration 2. คลิกเมนู พิมพ์ แล้วเลือก จํานวน 3. คลิกปุ่ม บันทึก ใหม่. สัญลักษณ์ใหม่จะปรากฏในส่วน คุณลักษณะ ของ หน้าต่างโปรพีเพรตี้
ตั้งค่าค่านิยมใหม่ LoopDuration เป็น 1 ต่อ เรียก NumberSequence เพื่อทำซ้ำหลังจากหนึ่งวินาที
การเขียนสคริปต์ของไฟฉาย
ตอนนี้คุณมีส่วนประกอบทั้งหมดที่จะควบคุมความสว่างของโคมไฟของคุณตลอดชีวิตของมัน, มันเวลาที่จะสร้าง Script ที่จะทำงานร่วมกันและมองบนแสง
เพื่อสคริปต์การเริ่มต้นเปลวไฟ:
- ใน หน้าต่าง Explorer เลื่อนเมาส์ไปที่โมเดลโคมไฟและคลิกปุ่ม ⊕ หน้าจอเมนูบริบทรัพย์แสดงขึ้นมา
- จากเมนู ใส่ สคริปต์ 3. ในสคริปต์ใหม่ กำลังติดตาม:
local RunService = game:GetService("RunService")
-- รับค่าตัวละคริสต์ที่กำหนดในแบบ
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- เก็บอ้างอิงไปยังตัวอินสแตนซ์ของโมเดลที่จะเปลี่ยนแปลง
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- เก็บค่าต้นฉบับของคุณสมบัติที่จะเปลี่ยนแปลง
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- รับค่าของ NumberSequencer (ns) ในเวลาที่กำหนด (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- หากเราอยู่ที่ 0 หรือ 1 ก็จะส่งค่าของจุดสวิตช์แรกหรือล่าสุด
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- มิฉะนั้น, ขั้นตอนผ่านแต่ละคู่ของจุดสังเกตขั้นต่อไป.
for i = 1, #ns.Keypoints - 1 do
-- รับค่าเฉพาะของตัวอักษรปัจจุบันและถัดไป
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- หาก nsTime อยู่ระหว่างเวลาของจุดมุ่งหมาย
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- คํานวณว่าNSTimeอยู่ระหว่างเวลาของจุดเวลาหลักสองครั้งนี้เรียกว่า alpha
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- กลับค่าที่อยู่ระหว่างจุลภาคในขณะที่ใช้ alpha
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- แก้ไขเวลาของตัวอักษรตัวเลข (ระหว่าง 0 และ 1)
local t = time() / loopDuration
local numberSequenceTime = t - math.floor(t)
-- ได้รับค่าของ NumberSequencer ในเวลานี้
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- ปรับความสว่างและสีตามค่านี้
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
เมื่อคุณ ทดสอบประสบการณ์ของคุณ ฟังก์ชัน Heartbeat จะประมวลผลสิ่งต่อไปในแต่ละเฟรม:
- แก้ไขสำหรับเวลา ( numberSequenceTime ) ภายใน brightnessCurve ตามเวลาปัจจุบัน.
- เวลาอยู่ระหว่าง 0 และ 1 เนื่องจากเหล่านี้เป็นตัวแทนของจุดเริ่มต้นและจุดสิ้นสุดของตัวเลขด้วย
- แก้ไขสำหรับค่า ( brightnessValue ) ของ brightnessCurve``Datatype.NumberSequence ในเวลา 1> numberSequencerTime1> .
- evaluateNumberSequence() คำนวณมูลค่าที่เกี่ยวข้องกับเวลาสำหรับใด ๆ NumberSequence
- ค่านี้ใช้เป็นค่าความสว่างเฉลี่ยที่ใช้กับโปรไฟล์ที่เปลี่ยนแปลงตามเวลา
- เปลี่ยนคุณสมบัติของโคมไฟโดยการเพิ่ม brightnessValue โดยความสว่างของโคมไฟ ความสว่างของลำแสง และสีของหลอด
การเปลี่ยนแปลงเหล่านี้จะทำให้เกิดปัญหาเรืองแสงด้านล่าง