複数のコンディション

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

コントロール構造は複数の状態を持つことができます。キーワード else および elseif は、複数の状態の下で発生する可能性のある追加のシナリオを作成できます。構文は次のように見えます:

他と違うシリアルを示します

if isGreen then
print("Go")
elseif isYellow then
print("Slow")
elseif isPedestrians then
print("Wait")
else
print("stop")
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 を使用して、以前の条件が真実でない場合に代替の条件を提供することです。

else と else を使用

if finishTime < 5 then
-- ゴールドメダルを獲得
elseif finishTime >= 5 and <= 10 then
-- 銀のメダルを獲得
elseif finishTime > 10 and <= 15 then
-- ブロンズメダルを獲得
end

式 if/then が実行されると、上部で実行し、 最初 、それが見つかるコンディションのコードのみを実行します。

レースコースのセットアップ

コースの開始場所と終了場所を配置し、スクリプトを作成してプレイヤーに時間を設定し、さまざまなメダルを授与します。

  1. FinishLine という名前の錨付きパーツを作成します。テストをより速くするために、開始と終了を近づけて配置してください。スクリプトを終了後にフィニッシュラインを移動できます。

    パートを終了
    コース全体
  2. 終了ラインに、RaceManager という名前のスクリプトを挿入します。次に、終了ラインからレースが始まってから何秒経ったかを保存する変数を 1つ追加し、終了ラインにリファレンスする変数を 1つ追加します。


    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("touched the finish line")
    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() はプレイヤーがパーツに触れるまで連続して呼び出されます。

Boolean 、 変数 、 True または False を保存する変数を使用して、終了() を 1 回だけ呼び出すようにします。

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


    local timePassed = 0
    local finishLine = script.Parent
    local raceActive = true
    -- プレイヤーがフィニッシュラインの部分に触れるときに実行されます
    local function finish()
  2. if 文にコンディションを追加して、レースアクティブが true であるかどうかをチェックします。


    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("touched the finish line")
    raceActive = false
    end
  4. プレイテストして、あなたのゲームがテストプリントステートメントを 1 回だけ見ることを確認します。

時間の経過を追跡する

if 文のように、 while ループは、条件を使用して実行するかどうかを確認することもできます。プレイヤーに時間を設定するには、raceActive ボクスが true であるときのみ実行するように、タイマーを作成します。

  1. スクリプトの下部に、while raceActive == true do を入力します。Enter を押して自動完了し、end を追加します。


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    end
  2. プレイヤーを制限するには、timePassed 変数に、毎秒 1 を追加します。打印ステートメントを含めて、ワークをテストします。


    finishLine.Touched:Connect(partTouched)
    while raceActive == true do
    task.wait(1)
    timePassed += 1
    print(timePassed)
    end
  3. ゲームをプレイし、出力ウィンドウに表示される各秒を確認してください。

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

最後に、 if 文を使用して、複数のコンディションでプレイヤーに異なる賞状を授与するために使用します。 if 文と two 以下の文を使用して、プレイヤーの終了時間をチェックし、正しいメダルを授与します。

  1. 各メダルが授与されることを確認するには、印刷ステートメントを使用してください。


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    end
  2. 金メダルを授与するには、timePassed と希望の終了時間を比較する if ステートメントをコードします。この例では、プレイヤーの時間が 10 秒未満であるかどうかをチェックします。


    local function finish()
    raceActive = false
    print("You finished in " .. timePassed)
    if timePassed <= 10 then
    print("You get a gold medal!")
    end
    end
  3. プレイテストを実行し、金メダルを授与できるかどうかを確認します。

追加のコンディションを追加する

さあ、金メダルのためにテストしたので、elseif キーワードを使用して他のメダルのコード条件をテストしています。

  1. シルバーメダルの場合、elseif を使用し、次の必要な時間範囲を設定します。この例では、範囲は 10秒以上ですが、20秒以下です。


    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!")
    end
    end
  2. ブロンズメダルのための同じパターンを使用します。以下の例と共にコードをチェックしてください。


    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!")
    end
    end
  3. 銀とブロンズのメダルのためのプレイテスト。

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

銀やブロンズのメタルが見えない場合は、以下の 1つを試してください。

  • それぞれ elseif の後に、そのコンディションの後に使用する必要があります。
  • In partTouched() で、if 文の 2つ目の条件が == を使用していることを確認してください。In raceActive == true で。
  • elseif がスコープ内にあるかどうかをチェックします。各 elseif コンディションは if/then 文の最初の行と最後の end の間にある必要があります。

Else コンディションを追加する

プレイヤーがメダルを獲得しなかった場合は、再び試すようにすすめる必要があります。この場合、else ステートメントを使用して、no other 条件が真実でない場合に実行されると、メッセージを表示することができます。

  1. 最後の elseif 以下にあり、上の end 以上にあり、新しい行を開始し、else を入力します。1> を追加してはなりません。以下の他の、プリントステートメントを使用してプロンプトします。


    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

2. 他のメッセージを確認するためにプレイテストをプレイ。

概要

コントロール構造は、1つのスキナリオをもっと持つことができます。使用する if 文を使用して、最初のステートメントをチェックし、その後、必要に応じて多くの elseif コンディションを追加します。最後に、else を使用して、すべての与えられたコンディションが偽である場合を含め、何が起こるべきかをステートします。

上部から開始し、すべての条件がチェックされます。最初の真の条件のみがコードを実行します。残りの条件はチェックされず、コードも実行されません。

プロジェクトを完了した後、スクリプトを拡張して、追加のいくつかの方法で新しい要素を追加できます。

  • プレイヤーが終了したときにスタートラインをタッチして、レースを繰り返すコードを追加します。
  • レース中に時間を表示する方法を設計します。あなたは Surface GUI を使用してパーツ上の時間を表示するか、クリエート時の橋のチュートリアル で時間を表示することができます。
Completed script

local timePassed = 0
local finishLine = script.Parent
-- レースが終了したときに、終了()とタイマーを繰り返すのを防ぐために使用されます
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