Ánh sáng bất chợt là một lực mạnh mẽ ảnh hưởng đến màu sắc của một môi trường. Ví dụ, một trang chủnhà với ánh sáng của một độ sáng coherent có thể cảm thấy ấm áp và mời gọi, nhưng nếu bạ
Như với tất cả 3D sản phẩm, có nhiều cách để đạt được bất kỳ mục tiêu cụ thể. Trong hướng dẫn này, bạn có thể nhanh chóng tạo ra một hoạt họa ánh sáng nhấp nháy bằng cách sử dụng các công cụ và phư
Trong phương pháp sau đây để tạo ra các đèn nhấp nháy, hãy làm theo mỗi mục để học cách tạo:
- Một độ sáng NumberSequence để ảnh hưởng đến độ sáng của thanh trong thời gian.
- Một đặc tính độ dài của lượt chuyển động để xác định thời gian mỗi lượt chuyển động cần thiết.
Nhập các mẫu đèn
Hướng dẫn này sử dụng một tập tin .rbxm có chất lượng cao, có thể tùy chỉnh của một mô hình ngân hàng chất béo để minh họa một chiếc đèn nhấp nháy. Bạn có thể sử dụng mô hình này để hiểu các khái niệm cơ bản, sau đó áp dụng chúng
Để nhập BankersLamp.rbxm :
Trong cửa sổ Explorer , nhấp chuột phải vào Workspace . Một menu ng上下文 hiển thị.
Chọn Nhúc nhích từ file… Một trình duyệt tập tin hiển thị.
Chọn BankersLamp .rbxm sau đó nhấp vào nút Mở . Mô hình hiển thị trong cửa sổ xem.
Tạo một chuỗi số độ sáng
Một NumberSequence là một loại dữ liệu đại diện cho một loạt các giá trị số từ 0 đến 1 trong suốt cuộc sống của một ví dụ / trường hợp. Loại dữ liệu này hữu ích cho việc tạo ra các ánh sáng nhấp nháy vì bạn có
Trục X của một NumberSequence đại diện thời gian, và trục Y đại diện độ sáng tương đối. Mỗi khuôn ở đầu và cuối của
Mặc dù đèn không có độ sáng NumberSequence bằng mặc định, bạn có thể tạo một đặribut độ sáng, đặt nó thành một độ sáng NumberSequence bằng cách thêm các điểm dừng với các giá trị khác nhau cho đến khi đèn nhấ
Để tạo ra một độ sáng NumberSequence :
Thêm một đặc tính NumberSequencer mới vào mô hình đèn.
Trong Cửa sổ Explorer , chọn mô hình đèn.
Trong cửa sổ Tính chất , hãy di chuyển đến phần Tính chất và nhấp vào nút Thêm tính chất . Hộp thoại 1>Thêm tính chất1> hiển thị.
Trong hội thoại Thêm Thuộc tính ,
Trong trương tên Tên , nhập BrightnessCurve .
Nhấp vào menu Type và chọn NumberSequencer .
Nhấp vào nút Lưu . Ứng tính mới hiển thị trong Mục tính phần của cửa sổ Tên .
Chọn theo mới BrightnessCurve property, then click the … button. A number sequence pop-up displays.
Thực hiện một trong những hành động sau đây:
- Để thay đổi độ sáng ở một điểm, hãy nhấp vào một keypoint và either drag it up hoặc down, hoặc enter a value in the Value field.
- Để đưa mới keypoints, hãy nhấp vào bất kỳ điểm trên biểu tượng.
- Để xóa một điểm chuẩn, chọn điểm chuẩn, sau đó nút Xóa .
- Để thêm một phạm vi ngẫu nhiên cho độ sáng, hãy nhấp vào bất kỳ điểm chuột nào và kéo dòng mép lên hoặc xuống. Lúc đó, ánh sáng tạo ra tại một độ sáng ngẫu nhiên giữa hộp thư màu hồng.
Ví dụ, bảng sau đây làm cho ánh sáng bất động từ độ sáng đầu tiên sang độ sáng hoàn toàn cho độ sáng thứ hai, sau đó là 75% độ sáng cho độ sáng thứ ba.
Tạo một thời gian lặp
Bây giờ bạn có một NumberSequence để xác định cách ánh sáng của bóng đèn thay đổi trong suốt cuộc sống của nó, bạn phải xác định thời gian mà bạn muốn cho độ lặp lại của NumberSequence , trong giây.
Để tạo một thời gian lưu động:
Thêm một đặc tính mới về thời gian lặp vào mô hình đèn.
Trong Cửa sổ Explorer , chọn mô hình đèn.
Trong cửa sổ Tính chất , hãy di chuyển đến phần Tính chất và nhấp vào nút Thêm tính chất . Hộp thoại 1>Thêm tính chất1> hiển thị.
Trong hội thoại Thêm Thuộc tính ,
Trong trường Tên , nhập LoopDuration .
Nhấp vào menu Type và chọn Số .
Nhấp vào nút Lưu . Ứng tính mới hiển thị trong Mục tính phần của cửa sổ Tên .
Đặt độ dài mới của LoopDuration lên 1 . Điều này cho biết NumberSequence để lặp lại sau một giây.
Lập trình nhấp mắt ánh sáng
Bây giờ bạn có tất cả các thành phần để điều khiển ánh sáng của лампо của bạn trong suốt cuộc sống của nó, thời gian tạo ra một Script để tất cả hoạt động cùng nhau và nhấp nháy ánh sáng.
Để script nhấp nháy ánh sáng:
- Trong cửa sổ Explorer , hover over the lamp model and click the ⊕ button. Một menu ng上下文 hiển thị.
- Từ menu, nhúc nhích một Tập lệnh .
- Trong mô-đun mới này, hãy nhập những gì theo dõi:
local RunService = game:GetService("RunService")
-- Lấy các giá trị đặt trên mô hình.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- Lưu các tham chiếu đến các instância của mô hình sẽ thay đổi.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- Lưu giữ giá trị nguyên bản của các thuộc tính để thay đổi.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- Nhận giá trị của NumberQueue (ns) ở một thời điểm nhất định (nsTime)
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- Nếu chúng tôi ở 0 hoặc 1, trả giá trị của keypoint đầu tiên hoặc cuối cùng, tương tự.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- Nếu không, thực hiện các bước qua các cặp keypoint theo thứ tự.
for i = 1, #ns.Keypoints - 1 do
-- Lấy điểm chính và tiếp theo.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- Nếu nsTime nằm giữa thời gian của các điểm chính,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- Tính toán nơiNSTime nằm giữa thời gian của các điểm chìa khóa, gọi đây là alpha.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- Trả giá trị giữa các điểm để sử dụng alpha.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- Giải quyết cho thời gian của NumberQueue (giữa 0 và 1).
local t = time() / loopDuration
local numberSequenceTime = t - math.floor(t)
-- Lấy giá trị của NumberQueue tại thời điểm này.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- Điều chỉnh độ sáng và màu sắc dựa trên giá trị này.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
Khi bạn chơi thử trải nghiệm của bạn, hành động Heartbeat thi hành các bước dưới đây mỗi khung:
- Giải quyết cho một thời gian ( numberSequenceTime ) trong brightnessCurve``Datatype.NumberSequence dựa trên thời gian hiện tại.
- Thời gian là giữa 0 và 1, vì đây là khoảng giữa của NumberQueue, tương ứng với sự bắt đầu và kết thúc của hàng loạt số.
- Giải quyết cho giá trị ( brightnessValue ) của brightnessCurve``Datatype.NumberSequence tại thời điểm 1> numberSequencerTime1> .
- evaluateNumberSequence() tính giá trị liên quan đến thời gian cho bất kỳ NumberSequence nào.
- Giá trị này được sử dụng như một giá trị độ sáng tương đối để ứng dụng cho các tính chất thay đổi theo thời gian.
- Đổi một số tính chất của đèn bằng cách nhân với brightnessValue của ánh sáng, sáng của thanh và màu của bóng.
Những thay đổi này đến các thuộc tính này theo thời gian dẫn đến hiệu ứng nhấp nháy dưới đây.