for ループを練習するには、徐々に明るくなり、時間の経過とともに暗くなる電灯を作成します。このプログラムは、街路灯や光るクリスタル等、様々なライトに使用できます。
パーツとスクリプトの設定
電灯はライトと支柱を組み合わせて作成したものになります。
- 光を見やすくするために、ゲームの世界を夜間に変更します。Explorer で Lighting を選択し、プロパティ ClockTime を 0 に変更してください。
- Lamp という名前の新しいパーツまたはモデルを作成します。
- Lamp を選択し、PointLight を追加します。PointLight の Brightness プロパティを操作して、光るランプを作成します。
- Lamp で、GlowScript という名前の新しいスクリプトを追加します。そのスクリプトで、Lamp と PointLight を格納する変数を作成します。 PointLight の名前を SpotLight に変更します。
local lightPart = script.Parent
local light = lightPart.SpotLight
ライトとパーツへのパスは、モデルの構成によって異なる場合があります。必ずエクスプローラーで再確認してください。
- 次に、ループが実行されるたびに光がどれだけ変化するかを保持する変数と、ループが再度実行されるまでに待機する秒数の変数を作成します。
-- 光の明るさが毎回どのくらい変わるか
local brightnessChange = 1
-- 明るさが変わる頻度(秒単位)
local timeChange = 1
ランプを光らせる
ランプは 2 つの for ループを使用します。1 つはカウントアップしてランプを明るくし、もう 1 つはカウントダウンして暗くします。各 for ループには、currentBrightness という制御変数があります。この変数の値をそのまま利用します。for ループの制御変数が上下させることで、ライトの明るさを変えるということです。
最初のループ (ライト増加)
for ループはキーワード for で始まり、その後に制御変数が続きます。ライトの明るさの値を制御変数の値に設定します。
- 次の値を使用して for ループをコーディングします。制御変数と終了値をカンマで区切ることを忘れないでください。
- 制御変数:currentBrightness
- 開始値:0
- 最終値:5
- 増減値:明るさの変更
local timeChange = 1
for currentBrightness = 0, 5, brightnessChange do
end
- for ループ内で、「light.Brightness = brightChange」と入力して、ライトの Brightness プロパティを制御変数の値に設定します。これで、ループが実行されるとライトが明るくなります。
for currentBrightness = 0, 5, brightnessChange do
light.Brightness = currentBrightness
end
- 明るさを変更した後に、wait() 関数で少し待たないと一気に明るくなってしまいます。timeChangeの値が待機時間になりますのでそれを指定します。
for currentBrightness = 0, 5, brightnessChange do
light.Brightness = currentBrightness
task.wait(timeChange)
end
- テスト実行して、ライトの明るさが毎秒増えることを確認します。
トラブルシューティング
時間の経過に伴う明るさの変化が見られない場合
- 「light.Brightness = currentBrightness」が for ループの do と end の間にありますか?
- timeChange が少なくとも 1 以上ですか? 数値が小さいほど明るさの変化は速くなりますが、時間の経過とともに見にくくなります。
- for ループの最初の行に、制御変数、終了値、および増減値を区切る合計 2 つのカンマがありますか?
2 番目のループ (光の減少)
ランプが点灯したので、今度は別の for ループを使用してランプをオフにしていきます。1 秒ごとに5,4,3,2,1,0と反転させて暗くしていきます。
- 時間の経過とともに明るさを減少させる for ループをコーディングします。次の値を使用します。
- 制御変数:currentBrightness
- 開始値:5
- 最終値:0
- 増減値:-brightChange
-- 2回目のループでランプを暗くする
for currentBrightness = 5, 0, -brightnessChange do
light.Brightness = currentBrightness
task.wait(timeChange)
end
ゲームを実行します。光が明るくなってから暗くなるのが見えるはずです。
光を繰り返す
現在、ライトは一度だけオンとオフを切り替えます。ランプを継続的にオン/オフするには、 今作成した for ループを while ループ内に配置します。
- for ループの下に、新しい while ループを作成します。
while true do
end
- 両方の for ループを while ループ内に配置します。for ループをインデントして、while ループと区別しやすくします。
while true do
for currentBrightness = 0, 5, brightnessChange do
light.Brightness = currentBrightness
task.wait(timeChange)
end
for currentBrightness = 5, 0, -brightnessChange do
light.Brightness = currentBrightness
task.wait(timeChange)
end
end
- ゲームを実行して、ライトが連続的に明るくなったり暗くなったりするのを確認します。
完成したプログラム
-- 明るくなったり暗くなったりするランプ
lightPart = script.Parent
light = lightPart.SpotLight
-- 光の明るさが毎回どのくらい変わるか
local brightnessChange = 1
-- 明るさが変わる頻度(秒単位)
local timeChange = 1
while true do
for count = 0, 5, brightnessChange do
light.Brightness = count
task.wait(timeChange)
end
-- 2回目のループでランプを暗くする
for count = 5, 0, -brightnessChange do
light.Brightness = count
task.wait(timeChange)
end
end
[ 4-2 for ループの概要 ]