閃爍的燈光 是一種強大的力量,可以影響環境的音調。例如,一個有照明的一致亮度的家庭可以感覺溫暖,但如果你在同一個首頁庭的走廊添加閃爍的燈光,它就會變得閃爍,可能暗示未體驗的危險。通過戰略模
與所有 3D 作品相同,有很多方法可以達成任何特定目標。在這個指南中,您可以使用 Studio 中的工具和方法快速創建閃爍的光動畫,包括僅包含 .rbxm 檔案的銀行家燈模型,以及您可以自訂您自己的體驗的美觀。
在下列方法中創建閃爍的燈光,請跟隨每個區域來學習如何創建立、創作:
- 一個能影響燈光強度的 NumberSequence 來改變燈光的亮度。
- 一個循環時效屬性,可以決定每個閃爍循環所需的時間。
正在匯入樣本燈
這個指南使用高品質、可自訂銀行家燈模型的下載可能的 .rbxm 檔案來展示一種閃爍的光技術。你可以使用這個模型來了解基本原理,然後將它們應用到你自己創建的模型或其他第三方建模軟件中。
要匯入 BankersLamp.rbxm:
在 Explorer 窗口中,右鍵單擊 工作區。一個上下文菜單顯示。
選擇 從檔案中插入… 檔案瀏覽器。
選擇 銀行家燈 .rbxm,然後單擊 開啟 按鈕。模型會在視視角中顯示。
創建一個亮度數字順序
Datatype.NumberSequencer 是一種資料類型,代表從 0 到 1 在實個體、實例的生命時間上的數字值。這種資料類型對於創建閃爍的燈光很有用,因為您可以指定要在其生命時間變更的亮度,並且在短時間內從全強度變更為沒有光的狀態,您可以達到閃爍的效
Datatype.NumberSequencer 的 X 軸代表時間,Y 軸代表相對亮度。 在數字順序的開始和結束位置,每個正方形是一個 鍵盤點 ,它決定了光亮度的值在光
雖然燈沒有預設的亮度 NumberSequence ,但您可以通過將燈設置為 NumberSequence 類型來創建一個亮度屬性,將它設置為 Datatype.NumberSequencer 輸入型,然後通過添加不同的值來實驗,直到燈閃動在您預設的速度。
要創建一個亮度 NumberSequence :
新增一個名為 lamp 的數字列列模型。
在 Explorer 窗口中,選擇 lamp 模型。
在 屬性 窗口中,移動至 屬性 區,然後按一下 添加屬性 按鈕。顯示 1>添加屬性1> 對話框。
在 新增屬性 對話框中,
在 名稱 字段中,輸入 光澤曲線 。
點擊 輸入 撥動菜單,然後選擇 數字順序 。
按一下 儲存 按鈕。新屬性會顯示在 屬性 窗口的2>欄位2>部分。
選擇新 光澤曲線 屬性,然後按一下 … 按鈕。一個數字順序會顯示。
執行以下一項操作:
- 要變更點上的亮度,請單擊一個鍵盤點,或將其拖曳上或向下,或在 值 字段輸入值。
- 要插入新的關鍵點,請在圖形中的任何位置按一下。
- 要刪除鑰匙點,請選擇鑰匙點,然後按一下 刪除 按鈕。
- 要為明亮度增加隨機範圍,請單擊任何鍵點並拖曳圍繞線上或向下拖曳。在那時,燈光會在粉紅色鍵簽之間產生隨機的亮度。
例如,下圖使燈光閃爍至全亮,第一閃光的亮度為 50%,第二閃光的亮度為 25%,然後第三閃光的亮度為 75%。
創建循環時間
現在您有了一個 NumberSequence 來確定燈光的亮度在其生命時間變化的方式,您必須確定要使用的閃爍循環時間。也就是說,這個循環時間基本上控制燈光的重複次數,在秒數量上。
要創建循環時效:
新增至燈模型的新循環時效屬性。
在 Explorer 窗口中,選擇 lamp 模型。
在 屬性 窗口中,移動至 屬性 區,然後按一下 添加屬性 按鈕。顯示 1>添加屬性1> 對話框。
在 新增屬性 對話框中,
在 名稱 字段中,輸入 LoopDuration 。
點擊 輸入 撥動菜單,然後選擇 數量 。
按一下 儲存 按鈕。新屬性會顯示在 屬性 窗口的2>欄位2>部分。
將新 LoopDuration 屬性設置為 1 。這會告訴 NumberSequence 在一秒後重複。
編寫光閃光箭
現在你有所有元素來控制燈的亮度過程中,你可以創建一個 Script 來讓一切運作 together 和閃爍燈光。
要啟動燈光閃爍:
- 在 Explorer 窗口中,將鼠標指针移動到燈模型上,然後單擊 ⊕ 按鈕。一個上下文菜單顯示。
- 從選單中插入 指令碼 。
- 在新的指令碼中,輸入以追蹤中內容:
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
-- 在特定時間(nsTime)獲取數字順序(ns)的值
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 返回值在 nsTime 之間的值。
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)
-- 取得此時此時的數字順序值。
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)
當你 測試你的體驗 時,心跳功能會在每個框架執行以下動作:
- 解決一個時間 (numberSequenceTime ) 內的時間 (brightnessCurve ) 以在現有時間 (NumberSequence ) 的基礎上。
- 時間是 0 和 1 之間,因為這表示數字順序的開始和結束,分別是。
- 解決 brightnessValue 的 brightnessCurve NumberSequence 在時間 1> numberSequencerTime1> 時。
- evaluateNumberSequence() 計算任何 NumberSequence 的時間與價值。
- 此值可作為相對的亮度值,適用於變更時間的屬性。
- 改變燈的特性,乘以brightnessValue 以燈的光澤、光束和電泳的顏色。
這些屬性的變更會導致以下閃爍效果。