コントロール構造には、1つ以上の条件があることができます。キーワード else と elseif は、複数の条件下で発生するべきことについて追加のシナリオを作成できます。構文は次のようになります:
elseif と else の構文を表示
if isGreen thenprint("Go")elseif isYellow thenprint("Slow")elseif isPedestrians thenprint("Wait")elseprint("stop")end
このプロジェクトでは、else と elseif が使用されて、ランナーが終了時間に応じて賞品を受け取るパルクールコースをコード化します。

複数の条件をコード化
このプロジェクトでは、各メダルに独自の if 文を書いてプレイヤーに報酬を授与できますが、それには多くの時間がかかります。たとえば、以下の想像コードを取りましょう。
すべての if 文
if finishTime < 5 then-- ゴールドメダルを入手するendif finishTime >= 5 and <= 10 then-- 銀メダルを入手するendif finishTime > 10 and <= 15 then-- ブロンズメダルを入手するend
これをコードするためのより読みやすく効率的な方法は、単一のif文を使用し、キーワード elseif を使用して、以前の条件が真でない場合にテストする代替条件を提供することです。
elseif と else を使用
if finishTime < 5 then-- ゴールドメダルを入手するelseif finishTime >= 5 and <= 10 then-- 銀メダルを入手するelseif finishTime > 10 and <= 15 then-- ブロンズメダルを入手するend
if/then 文が実行されると、トップから始まり、検索した最初の 真の条件 のコードのみが実行されます。
レースコースを設定する
コースのスタート地点と終了線を配置し、プレイヤーを時間管理し、異なるメダルを授与するスクリプトを作成することから始めます。
フィニッシュラインという名前のアンカー部品を作成します。テストをより速く行うには、始まりと終わりを近づけて配置します。スクリプトを完了した後、終了ラインを移動できます。
パーツを終了 >コース全体 >FinishLine で、RaceManager という名前のスクリプトを挿入します。次に、レースが開始されてから何秒経過したかを保存する変数と、フィニッシュラインを参照する 2番目の変数を追加します。
local finishLine = script.Parentlocal timePassed = 0機能名 finish() を持つ関数を作成します。
local timePassed = 0local finishLine = script.Parentlocal function finish()end自所有で:
- プレイヤーがタッチすると partTouched() を実行する機能をコード化し、名前は finish() 。
- 終了ラインパーツを partTouched() に接続します。
- コードを以下の例と比較します。
local function finish()print("touched the finish line")endlocal function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenfinish()endendfinishLine.Touched:Connect(partTouched)プレイテストし、フィニッシュラインにタッチすると finish() が呼び出されているか確認する
終了() を繰り返さないようにする
現在、プレイヤーがフィニッシュラインに触れるたびに、finish() は、プレイヤーがパーツに触れ続ける限り、連続して呼び出されます。
使用する ブール 、真偽を保存する変数、で終了() が 1回だけ呼ばれるようにするために、true または false を保存する変数を使用してください。
新しい変数 raceActive を作成し、それを true に設定します。
local timePassed = 0local finishLine = script.Parentlocal raceActive = true-- プレイヤーがフィニッシュラインの部分に触れるたびに実行local function finish()if 文に第二の条件を追加して、レースアクティブが true であるかどうかを確認してから finish() を呼び出します。
local function partTouched(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and raceActive == true thenfinish()endendfinish() が再び呼び出されるのを停止するには、raceActive を false に設定します。
local function finish()print("touched the finish line")raceActive = falseendゲームをプレイして、テスト印刷文を一度だけ表示するかどうかをチェックします。
時間を追跡する
if 文と同様、 while ループも条件を使用して実行する必要があるかどうかを確認できます。プレイヤーをタイミングするには、raceActive ブールが真になるときにのみ実行する while true do ループを使用してタイマーを作成します。
スクリプトの底に、while raceActive == true do を入力します。Enter を押して自動完了し、end を追加します。
finishLine.Touched:Connect(partTouched)while raceActive == true doendループ内で、プレイヤーをタイミングするには、timePassed 変数に毎秒 1 を追加します。作業をテストするための印刷文を含めます。
finishLine.Touched:Connect(partTouched)while raceActive == true dotask.wait(1)timePassed += 1print(timePassed)endゲームをプレイし、出力ウィンドウに毎秒表示されることを確認します。
選手メダルを授与する
最後に、複数の条件を使用した if 文を使用して、プレイヤーにパフォーマン履行に基づいて異なる賞メダルを授与します。if 文と deux 文を使用して、プレイヤーの終了時間をチェックし、正しいメダルを授与します。
各メダルが授与できるかどうかを確認するには、印刷文言を使用します。
local function finish()raceActive = falseprint("You finished in " .. timePassed)endゴールドメダルを授与するには、timePassed を目標の終了時間と比較する if 文をコードします。この例では、プレイヤーの時間が 10秒未満か等しいかをチェックします。
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")endendプレイテストを行い、ゴールドメダルを授与できるか確認します。
追加条件を追加する
ゴールドメダルのテストが完了したので、elseif キーワードを使用した他のメダルのコード条件をテストします。
銀メダルの場合は、elseif と次の希望時間範囲を使用します。この例では、範囲は 10秒以上ですが、20秒未満または等しいです。
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")endendブロンズメダルに同じパターンを使用します。以下の例でコードをチェックします。
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")endend銀メダルとブロンズメダルのプレイテスト。
トラブルシュートのヒント
銀とブロンズのメタルが表示されない場合は、以下のいずれかを試してください。
- それぞれ elseif は、その条件の後に then があるべきです。
- In partTouched() , make sure the second condition of the if statement uses == , like in raceActive == true .
- それぞれの elseif がスコープ内にあるかどうかを確認します。それぞれの elseif 条件は、if/then 文の最初の行と最後の end の間にある必要があります。
他の条件を追加する
プレイヤーがメダルを獲得しなかった場合、再試行するように奨励する必要があります。この場合、else 文が実行され、 他の条件が真でない場合 にメッセージを表示するために使用できます。
最後の elseif と上の end の下で、新しい行を開始し、else を入力します。 それから追加しないでください その他のものの下、印刷文を使用して再試行するように促します。
local function finish()raceActive = falseprint("You finished in " .. timePassed)if timePassed <= 10 thenprint("You get a gold medal!")elseif timePassed > 10 and timePassed <= 20 thenprint("You get a silver medal!")elseif timePassed > 20 and timePassed <= 30 thenprint("You get a bronze medal!")elseprint("Try again!")endend
2 . その他のメッセージを見るためにプレイテストを行う。
概要
コントロール構造には、1つ以上のシナリオがあることができます。使用する if 文は、チェックする最初の文を設定し、必要に応じて elseif 条件を追加します。最後に、else を使用して、指定されたすべての条件が偽い場合に起こるべきことを述べます。
上から順に、すべての条件がチェックされ、最初の真の条件だけがコードを実行します。残りの条件はチェックされず、コードも実行されません。
プロジェクトを完了した後、スクリプトを拡張して、いくつかの追加方法で新しい要素を追加できます。
- プレイヤーが終了時にスタートラインにタッチしてレースを繰り返せるように、コードを追加します。
- レース中に時間を表示する方法を設計します。パーツに表示される時間を Surface GUI を使用して表示するか、タイムドブリッジの作成チュートリアル のようにしてください。
Completed script
local timePassed = 0
local finishLine = script.Parent
-- レースが終了すると finish() とタイマーが繰り返されないようにするために使用
local raceActive = true
-- プレイヤーがフィニッシュラインにタッチして、報酬を表示するときに実行
local function finish()
raceActive = false
print("You finished in " .. timePassed)
if timePassed <= 10 then
print("You get a gold medal!")
elseif timePassed > 10 and timePassed <= 20 then
print("You get a silver medal!")
elseif timePassed > 20 and timePassed <= 30 then
print("You get a bronze medal!")
else
print("Try again!")
end
end
-- レースがアクティブになったときにプレイヤーがパーツに触れるかどうかをチェックする
local function partTouched(otherPart)
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid and raceActive == true then
finish()
end
end
finishLine.Touched:Connect(partTouched)
-- レースがアクティブな状態でレース時間を追跡します。スクリプトの最下部にある必要があります。
while raceActive == true do
task.wait(1)
timePassed += 1
print(timePassed)
end