創建閃爍的燈光

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

閃爍的燈光 是一種強大的力量,可以影響環境的音調。例如,一個有照明的一致亮度的家庭可以感覺溫暖,但如果你在同一個首頁庭的走廊添加閃爍的燈光,它就會變得閃爍,可能暗示未體驗的危險。通過戰略模

與所有 3D 作品相同,有很多方法可以達成任何特定目標。在這個指南中,您可以使用 Studio 中的工具和方法快速創建閃爍的光動畫,包括僅包含 .rbxm 檔案的銀行家燈模型,以及您可以自訂您自己的體驗的美觀。

在下列方法中創建閃爍的燈光,請跟隨每個區域來學習如何創建立、創作:

  • 一個能影響燈光強度的 NumberSequence 來改變燈光的亮度。
  • 一個循環時效屬性,可以決定每個閃爍循環所需的時間。
  • Script 設定兩個屬性如何與模型的子兒 MeshParts 合作,以發射燈光。

正在匯入樣本燈

這個指南使用高品質、可自訂銀行家燈模型的下載可能的 .rbxm 檔案來展示一種閃爍的光技術。你可以使用這個模型來了解基本原理,然後將它們應用到你自己創建的模型或其他第三方建模軟件中。

要匯入 BankersLamp.rbxm

  1. 在 Explorer 窗口中,右鍵單擊 工作區。一個上下文菜單顯示。

  2. 選擇 從檔案中插入… 檔案瀏覽器。

  3. 選擇 銀行家燈 .rbxm,然後單擊 開啟 按鈕。模型會在視視角中顯示。

創建一個亮度數字順序

Datatype.NumberSequencer 是一種資料類型,代表從 0 到 1 在實個體、實例的生命時間上的數字值。這種資料類型對於創建閃爍的燈光很有用,因為您可以指定要在其生命時間變更的亮度,並且在短時間內從全強度變更為沒有光的狀態,您可以達到閃爍的效

Datatype.NumberSequencer 的 X 軸代表時間,Y 軸代表相對亮度。 在數字順序的開始和結束位置,每個正方形是一個 鍵盤點 ,它決定了光亮度的值在光

雖然燈沒有預設的亮度 NumberSequence ,但您可以通過將燈設置為 NumberSequence 類型來創建一個亮度屬性,將它設置為 Datatype.NumberSequencer 輸入型,然後通過添加不同的值來實驗,直到燈閃動在您預設的速度。

要創建一個亮度 NumberSequence :

  1. 新增一個名為 lamp 的數字列列模型。

    1. Explorer 窗口中,選擇 lamp 模型。

    2. 屬性 窗口中,移動至 屬性 區,然後按一下 添加屬性 按鈕。顯示 1>添加屬性1> 對話框。

    3. 新增屬性 對話框中,

      1. 名稱 字段中,輸入 光澤曲線

      2. 點擊 輸入 撥動菜單,然後選擇 數字順序

      3. 按一下 儲存 按鈕。新屬性會顯示在 屬性 窗口的2>欄位2>部分。

  2. 選擇新 光澤曲線 屬性,然後按一下 按鈕。一個數字順序會顯示。

  3. 執行以下一項操作:

    • 要變更點上的亮度,請單擊一個鍵盤點,或將其拖曳上或向下,或在 字段輸入值。
    • 要插入新的關鍵點,請在圖形中的任何位置按一下。
    • 要刪除鑰匙點,請選擇鑰匙點,然後按一下 刪除 按鈕。
    • 要為明亮度增加隨機範圍,請單擊任何鍵點並拖曳圍繞線上或向下拖曳。在那時,燈光會在粉紅色鍵簽之間產生隨機的亮度。

例如,下圖使燈光閃爍至全亮,第一閃光的亮度為 50%,第二閃光的亮度為 25%,然後第三閃光的亮度為 75%。

創建循環時間

現在您有了一個 NumberSequence 來確定燈光的亮度在其生命時間變化的方式,您必須確定要使用的閃爍循環時間。也就是說,這個循環時間基本上控制燈光的重複次數,在秒數量上。

要創建循環時效:

  1. 新增至燈模型的新循環時效屬性。

    1. Explorer 窗口中,選擇 lamp 模型。

    2. 屬性 窗口中,移動至 屬性 區,然後按一下 添加屬性 按鈕。顯示 1>添加屬性1> 對話框。

    3. 新增屬性 對話框中,

      1. 名稱 字段中,輸入 LoopDuration

      2. 點擊 輸入 撥動菜單,然後選擇 數量

      3. 按一下 儲存 按鈕。新屬性會顯示在 屬性 窗口的2>欄位2>部分。

  2. 將新 LoopDuration 屬性設置為 1 。這會告訴 NumberSequence 在一秒後重複。

編寫光閃光箭

現在你有所有元素來控制燈的亮度過程中,你可以創建一個 Script 來讓一切運作 together 和閃爍燈光。

要啟動燈光閃爍:

  1. 在 Explorer 窗口中,將鼠標指针移動到燈模型上,然後單擊 ⊕ 按鈕。一個上下文菜單顯示。
  2. 從選單中插入 指令碼
  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
-- 在特定時間(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)

當你 測試你的體驗 時,心跳功能會在每個框架執行以下動作:

  1. 解決一個時間 (numberSequenceTime ) 內的時間 (brightnessCurve ) 以在現有時間 (NumberSequence ) 的基礎上。
    • 時間是 0 和 1 之間,因為這表示數字順序的開始和結束,分別是。
  2. 解決 brightnessValuebrightnessCurve NumberSequence 在時間 1> numberSequencerTime1> 時。
    • evaluateNumberSequence() 計算任何 NumberSequence 的時間與價值。
    • 此值可作為相對的亮度值,適用於變更時間的屬性。
  3. 改變燈的特性,乘以brightnessValue 以燈的光澤、光束和電泳的顏色。

這些屬性的變更會導致以下閃爍效果。