Flickering ライトを作成する

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

粋な照明灯 は、環境のトーンに影響を与える強力な力です。たとえば、明るさの一貫性のある照明を持つ家は、暖かく歓迎的に感じることができますが、同じホームの廊下に粋な照明灯を追加すると、不気味になりそうな雰囲気を感じる

すべての 3D 作作品と同様に、特定の目標を達成する方法はたくさんあります。このガイドでは、Studio の .rbxm ファイルを使用して、単に銀行のランプモデルを含む子供のランプモデルを作成し、あなたのエクスペリエンスのエステティックに合わせてカスタマイズでき

次のメソッドでフリッキーライトを作成するには、各セクションに従って作成方法を学びましょう:

  • Datatype.NumberSequencer は、ランプの明るさに影響を与えるための明るさです。
  • フリッキングループの持続時間を決定するループ期間の属性。
  • Class.Script は、2つの属性がモデルの子 MeshParts と共同で作動するように構成し、ランプの光を閃かせます。

サンプルランプのインポート

このガイドでは、高品質のカスタマイズ可能な銀行のランプモデルのダウンロード可能な .rbxm ファイルを使用して、フリッキャライト技術を示すために使用されています。このモデルを使用して、基本原理を理解し、Studio や他の第三者モデリングソフトウェアで作成する自分のモデルに適用することができます。

BankersLampをインポートするには:

  1. In the エクスプローラー ウィンドウ, right-click ワークスペース . A コンテキストメニューが表示されます。

  2. Select ファイルから挿入… ファイルブラウザが表示されます。

  3. Select the BankersLamp .rbxm , then click the 開く ボタン. The model displays within the viewport.

ブライトネス数列を作成する

A NumberSequence は、インスタンスのライフタイムにわたって 0 から 1 の数値の連続を表示するデータタイプです。このタイプのデータタイプは、フリッキングライトの明るさを変更する方法を指定することで便利です。フルインテンシティのライト光の明るさを

Datatype.NumberSequencer の X軸は時間を表し、Y軸は相対的な明るさを表します。数字のシーケンスの開始と終了の各四角は、 キーポイント であり、ランプの明るさ

ランプはデフォルトで明るさを持っていません NumberSequence 、但し、明るさ属性を作成し、NumberSequence タイプに設定して、ライトが設定された速度で点滅するようにキーポイントを追加して、実験して、異なる値の入力を追加して、ライトが設定された速度で点滅するようにします。

明るさを作成するには NumberSequence :

  1. ランプモデルに新しい数字シーケンス属性を追加します。

    1. In the エクスプローラー window, select the lamp model.

    2. In the プロパティ window, navigate to the アトリビュート section and click on the 追加アトリビュート button. The 1>追加アトリビュート1> dialog displays.

    3. In the 属性を追加 ダイアログ,

      1. In the 名前 フィールドに、 BrightnessCurve を入力します。

      2. クリックする タイプ ドロップダウンメニュー、然後 NumberSequencer を選択します。

      3. クリックします[保存]ボタン。新しいアトリビュートは、プロパティ ウィンドウのアトリビュートセクションに表示されます。

  2. 新しい 明るさカーブ プロパティを選択し、 ボタンをクリックします。数値シーケンスが表示されます。

  3. 次のアクションの 1 つを実行します:

    • ポイントの明るさを変更するには、キーポイントをクリックし、上または下にドラッグしますか、または Value フィールドに値を入力します。
    • 新しいキーポイントを挿入するには、グラフィックの任意の場所をクリックします。
    • キーポイントを削除するには、キーポイントを選択し、 削除 ボタンをクリックします。
    • 明るさのランダムな範囲を追加するには、任意のキーポイントをクリックし、枚velope のラインを上または下にドラッグします。その時、ライトはピンクの枚葉の間でランダムな明るさを生成します。

たとえば、次のグラフィックは、最初のフリッカーにライトを完全に明るくするために、50%の明るさを 2番目のフリッカーに、そして 3番目のフリッカーに 75%の明るさを設定します。

ループの時間を作成する

ランプの光の明るさを NumberSequence で確認すると、ランプの寿命の中でランプの光の明るさがどのように変化するかを判断する必要があります。つまり、このループの期間は、NumberSequence が実行される秒数に基づいて制御されます。

ループの期間を作成するには:

  1. ランプモデルに新しいループ時間属性を追加します。

    1. In the エクスプローラー window, select the lamp model.

    2. In the プロパティ window, navigate to the アトリビュート section and click on the 追加アトリビュート button. The 1>追加アトリビュート1> dialog displays.

    3. In the 属性を追加 ダイアログ,

      1. In the 名前 フィールドに、 ループ時間 を入力します。

      2. クリックする タイプ ドロップダウンメニュー、然後 番号 を選択します。

      3. クリックします[保存]ボタン。新しいアトリビュートは、プロパティ ウィンドウのアトリビュートセクションに表示されます。

  2. 新しい LoopDuration 属性を 1 に設定します。これにより、NumberSequence が 1 秒後に繰り返されるようになります。

ライトフリッカーのスクリプト

あなたのランプの明るさを制御するためのすべての要素があるため、ライフタイムでランプの明るさを制御する Script を作成する時間です。

ライトのフリッカーをスクリプトするには:

  1. In the エクスプローラー ウィンドウ, hover over the lamp model and click the ⊕ ボタン. A コンテキストメニューが表示されます。
  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) に数列の値を取得します。
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. 時間 1> numberSequenceTime1> の brightnessCurveNumberSequence の値に対応します。
    • evaluateNumberSequence() は、任意の NumberSequence の時間に関連付けられた値を計算します。
    • この値は、時間が経過すると変更されるプロパティに適用する相対的な明るさ値として使用されます。
  3. ランプのプロパティを変更するために、brightnessValue をライトの明るさ、ビームの明るさ、および電球の色によって乗算します。

これらのプロパティの変更により、以下のフリッカーエフェクトが発生します。