複数の条件

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

制御構造には、複数の条件を持たせることができます。キーワード elseelseif を使用することで、複数の条件下で何が起こるべきかを追加のシナリオとして作成できます。構文は次のようになります。

elseif と else の構文を示す

if isGreen then
print("進め")
elseif isYellow then
print("ゆっくり")
elseif isPedestrians then
print("待って")
else
print("停止")
end

このプロジェクトでは、elseelseif を使用して、ランナーがフィニッシュタイムに応じて賞を受け取るパルクールコースをコーディングします。

複数の条件をコーディングする

このプロジェクトでは、各メダルに対してユニークな if 文を作成してプレイヤーに賞を授与することができますが、それには多くの時間がかかります。たとえば、以下の架空のコードを考えてみてください。

すべての if 文

if finishTime < 5 then
-- 金メダルを取得
end
if finishTime >= 5 and <= 10 then
-- 銀メダルを取得
end
if 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 ステートメントが実行されると、最初に見つけた 最初の 真の条件のコードのみを実行します。

レースコースの設定

最初にコースのスタートポイントとフィニッシュラインを設定し、プレイヤーのタイミングを計測し、異なるメダルを授与するスクリプトを作成します。

  1. FinishLine という名前のアンカー付きパーツを作成します。テストを早くするために、スタートとフィニッシュを近くに配置します。スクリプトが完成した後にフィニッシュラインを移動できます。

    フィニッシュパーツ
    コース全体
  2. FinishLine に RaceManager という名前のスクリプトを挿入します。次に、レースが開始されてから経過した秒数を保存するための変数を 1 つ、FinishLine を参照するための 2 番目の変数を追加します。


    local finishLine = script.Parent
    local timePassed = 0
  3. finish() という名前の関数を作成します。


    local timePassed = 0
    local finishLine = script.Parent
    local function finish()
    end
  4. 自分で:

    • プレイヤーが触れたときに finish() を実行する partTouched() という名前の関数をコーディングします。
    • フィニッシュラインパーツを partTouched() に接続します。
    • コードを以下の例と比較します。

    local function finish()
    print("フィニッシュラインに触れました")
    end
    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    finish()
    end
    end
    finishLine.Touched:Connect(partTouched)
  5. プレイテストを行い、フィニッシュラインに触れたときに finish() が呼び出されることを確認します。

finish() を繰り返し実行しないようにする

現在、プレイヤーがフィニッシュラインに触れるたびに、finish() がプレイヤーがその部分に触れている限り連続して呼び出されます。

ブール値を使用して、finish() が一度だけ呼び出されるようにします。このブール値は、真または偽を保存する変数です。

  1. raceActive という名前の新しい変数を作成し、true に設定します。


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- プレイヤーがフィニッシュラインパーツに触れると実行される
    local function finish()
  2. finish() を呼び出す前に raceActive が真であるかを確認するために、if 文に 2 番目の条件を追加します。


    local function partTouched(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and raceActive == true then
    finish()
    end
    end
  3. finish() が再度呼び出されないように、raceActivefalse に設定します。


    local function finish()
    print("フィニッシュラインに触れました")
    raceActive = false
    end
  4. エクスペリエンスをプレイテストして、テストプリントステートメントが 1 回だけ表示されることを確認します。

時間を記録する

if 文のように、while ループも条件を使用して実行すべきかどうかを判断できます。プレイヤーの時間を計測するために、raceActive ブール値が真のときだけ実行される while true do ループを使用してタイマーを作成します。

  1. スクリプトの下部に、while raceActive == true do と入力します。 Enter を押して補完機能を使い、end を追加します。


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. ループ内で、プレイヤーの時間を記録するために、timePassed 変数に 1 を加算します。作業をテストするために print ステートメントを含めます。


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. エクスペリエンスをプレイテストし、各秒が Output ウィンドウに表示されることを確認します。

プレイヤーにメダルを授与する

最後に、if 文を使用して複数の条件に基づいてプレイヤーに異なる賞メダルを授与します。if 文と 2 つの elseif 文を使用して、プレイヤーのフィニッシュタイムを確認し、正しいメダルを授与します。

  1. 各メダルを授与できることを確認するために、print ステートメントを使用します。


    local function finish()
    raceActive = false
    print("あなたは " .. timePassed .. " 秒で完走しました")
    end
  2. 金メダルを授与するには、timePassed を所定のフィニッシュタイムに比較する if 文をコーディングします。この例では、プレイヤーの時間が 10 秒以下であるかどうかを確認します。


    local function finish()
    raceActive = false
    print("あなたは " .. timePassed .. " 秒で完走しました")
    if timePassed <= 10 then
    print("金メダルを獲得しました!")
    end
    end
  3. プレイテストを行い、金メダルが授与できることを確認します。

追加の条件を追加する

金メダルの条件をテストした後は、elseif キーワードを使用して他のメダルの条件をコーディングします。

  1. 銀メダルの場合は、elseif を使用して次の所定の時間範囲を指定します。この例では、範囲が 10 秒を超え、20 秒以下のときです。


    local function finish()
    raceActive = false
    print("あなたは " .. timePassed .. " 秒で完走しました")
    if timePassed <= 10 then
    print("金メダルを獲得しました!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("銀メダルを獲得しました!")
    end
    end
  2. 銅メダルにも同じパターンを使用します。以下の例を使ってコードを確認してください。


    local function finish()
    raceActive = false
    print("あなたは " .. timePassed .. " 秒で完走しました")
    if timePassed <= 10 then
    print("金メダルを獲得しました!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("銀メダルを獲得しました!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("銅メダルを獲得しました!")
    end
    end
  3. 銀メダルと銅メダルを得るためにプレイテストを行います。

トラブルシューティングのヒント

銀メダルと銅メダルが表示されない場合は、以下のいずれかを試してください。

  • elseif の後にその条件の後に then を追加する必要があります。
  • partTouched() の中で、if 文の 2 番目の条件が == を使用していることを確認してください。たとえば raceActive == true のように。
  • elseif がスコープ内にあることを確認してください。すべての elseif 条件は、if/then ステートメントの最初の行と最後の end の間にある必要があります。

else 条件を追加する

プレイヤーがどのメダルも獲得しなかった場合、再挑戦を促すべきです。この場合、すべての他の条件が真でない場合に実行される else ステートメントを使用して、メッセージを表示できます。

  1. 最後の elseif の下、end の上で新しい行を始めて else と入力します。Then を追加しないでください。else の下に print ステートメントを使用して、再挑戦を促します。


    local function finish()
    raceActive = false
    print("あなたは " .. timePassed .. " 秒で完走しました")
    if timePassed <= 10 then
    print("金メダルを獲得しました!")
    elseif timePassed > 10 and timePassed <= 20 then
    print("銀メダルを獲得しました!")
    elseif timePassed > 20 and timePassed <= 30 then
    print("銅メダルを獲得しました!")
    else
    print("再挑戦してください!")
    end
    end
  2. else メッセージが表示されることを確認するためにプレイテストを行います。

まとめ

制御構造には複数のシナリオを持たせることができます。if 文を使用して初期の文を設定し、必要に応じて elseif 条件を追加します。最後に、すべての条件が偽である場合に何が起こるべきかを示すために else を使用します。

最初からすべての条件がチェックされ、最初に見つけた真の条件だけがコードを実行します。他の条件はチェックされず、そのコードは実行されません。

プロジェクトを完成させた後、スクリプトを拡張して新しい要素を追加する方法はいくつかあります。

  • プレイヤーがフィニッシュ後にスタートラインに触れることでレースをリピートできるようにコードを追加します。
  • レース中に時間を表示する方法を設計します。時間を Surface GUI を使用してパーツ上に表示することができます。たとえば、時間制限付きブリッジを作成するチュートリアル のように。
完成したスクリプト

local timePassed = 0
local finishLine = script.Parent
-- レースが終了したときに finish() とタイマーが繰り返されないように
local raceActive = true
-- プレイヤーがフィニッシュラインに触れて賞を見せるときに実行される
local function finish()
raceActive = false
print("あなたは " .. timePassed .. " 秒で完走しました")
if timePassed <= 10 then
print("金メダルを獲得しました!")
elseif timePassed > 10 and timePassed <= 20 then
print("銀メダルを獲得しました!")
elseif timePassed > 20 and timePassed <= 30 then
print("銅メダルを獲得しました!")
else
print("再挑戦してください!")
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
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。