ループの練習 - タイミングブリッジを作成

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

このプロジェクトは、forループを実用的に使用する別の例です。この橋では、プレイヤーがボタンに触れることで、橋が歩行可能になり、限られた時間内に消える前に渡ることができます。タイマーを作成し、プレイヤーに残り時間を表示するために、forループを使用します。

プロジェクトのセットアップ

この橋は、オビーのような動きに基づく挑戦を含む任意のRobloxプロジェクトに追加できます。

パーツを作成

  1. 橋を作る場所を見つけます。例えば、川やオビーの大きな隙間などです。以下のように、3つの固定パーツを作成します。

    • TimerDisplay
    • Bridge
    • ButtonBridge
  2. 非アクティブなとき、橋は半透明になります。そのために、Bridgeを選択し、そのプロパティを変更します。

    • Transparency = 0.8
    • CanCollide = False

タイマーディスプレイを作成

橋を渡るとき、プレイヤーは橋が消えるまでの残り秒数を確認する必要があります。画像やテキストを表示する方法の一つは、パーツにSurface GUIというオブジェクトを追加することです。Surface GUIは、ゲーム内のサイン、カスタムヘルスバー、インベントリシステムを作成するためにも使用できます。このチュートリアルではこれを簡単に説明しますが、詳細はチュートリアルセクションで確認できます。

  1. TimerDisplayを選択し、SurfaceGuiを追加します。次に、Surface Guiに親子関係を持つTextLabelを追加します。

  2. Surface GUIを選択します。プロパティで、以下の変更を行います。

    • Faceを変更して、プレイヤーが見ているタイマーの前面にテキストラベルが表示されるようにします。
  3. TextLabelを選択します。プロパティで、以下の変更を行います。

    • Size{1, 0},{1, 0}に設定します。
    • TextScaledをtrueに設定します。
    • Textを空白に設定します。テキストはスクリプトを使用して更新されます。

スクリプトをセットアップ

タイマーが設置されたので、橋を制御し、プレイヤーにカウントダウン番号を表示するスクリプトを作成します。

  1. Bridgeパーツに、TimedBridgeという名前の新しいスクリプトを追加します。そのスクリプト内で、以下の変数を作成します。

    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- 橋が固体のままでいる時間
    local timerDuration = 5

タッチインタラクションをコーディング

橋を使用するには、2つの関数を作成する必要があります。1つの関数は橋を歩行可能にし、タイマーを表示します。もう1つの関数は、プレイヤーが橋をアクティブにするボタンに触れたかどうかを確認します。

  1. startTimer()という新しい関数を作成し、その中にprint文を追加します。このprint文を使用してコードをテストします。

    local timerDuration = 5
    local function startTimer()
    print("カウントダウンが開始されました")
    end
  2. buttonPressed()という関数をコーディングして、ヒューマノイドがボタンに触れたかどうかを確認します。この関数はpartTouchedというパラメータを受け入れ、ヒューマノイドがそのパーツに検出された場合に空のif文を持ちます。

    local function startTimer()
    print("カウントダウンが開始されました")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. タイマーを開始するために、if文の中でstartTimer()関数を呼び出します。

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. buttonPressed()の最後に、ボタンのTouchedイベントにbuttonPressed()関数を接続します。

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. プロジェクトを実行します。パーツに触れて、Outputウィンドウでprint文を確認します。

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

この時点で、橋が意図した通りに機能しない場合は、以下のいずれかを試してください。

問題: "...はworkspaceの有効なメンバーではありません"というエラーメッセージ。

  • TimedBridgeスクリプトで、すべてのパーツがExplorerに表示されている通りに正確にスペルされているか確認します。

問題: パーツが見えない。

  • すべてのパーツが固定されていることを確認します。
  • 橋のTransparencyプロパティを確認します。

タイマーを作成

プレイヤーが橋に乗るたびに、startTimer()は橋を歩行可能にし、タイマーを開始します。タイマーが0に達すると、橋は歩行不可能になり、十分に速くない人は落ちてしまいます。

橋を歩行可能にする

まず、スクリプトは橋を固体または衝突可能にし、その後、歩行不可能になるまでタイマーを開始する必要があります。

  1. 橋を歩行可能にするために、startTimer()内で橋のTransparencyプロパティを0(不透明)に、CanCollideプロパティをtrueに変更します。

    local function startTimer()
    -- 橋を表示可能で歩行可能にする
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. カウントダウンするタイマーを作成するために、以下の値を持つforループを作成します。

    • 制御変数: countという名前で、timerDurationに設定します。
    • 終了: 0
    • インクリメント: -1
    local function startTimer()
    -- 橋を表示可能で歩行可能にする
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. プレイヤーにタイマーを表示するために、timerTextのテキストをcountを表示するように変更します。forループが各イテレーションを通過するたびに、プレイヤーにタイマーの次の数字が表示されます。

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. forループが1秒ごとに実行されるように、task.wait関数を使用します。

    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. ゲームを実行します。ボタンに触れると、橋が表示され、タイマーが開始され、完了します。

橋が再起動しないようにする

ただし、ボタンの上で動き回ると、タイマーが再起動し続けることに注意してください。

これは、ボタンに触れるたびにforループが呼び出され、forループが最初から始まるためです。タイマーが常に再起動しないようにするには、startTimer()が再度呼び出されるかどうかを制御するブール値を追加する必要があります。

ブール値は、他の変数と同じように書かれますが、数字や文字列の代わりにtrueまたはfalseに設定できます。この状況では、スクリプトはタイマーが現在実行中かどうかを確認するためにブール値を使用します。

  1. スクリプトの最上部で、変数の下にtimerActiveという名前の変数を作成し、ボタンがまだ押されていないため、falseに設定します。

    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. タイマーがtimerActiveブール値がfalseのときのみ開始されるように、buttonPressed()のif文に2つ目の条件を追加します。

    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. startTimer()がタイマーが切れる前に再度実行されないように、ブール値timerActiveをtrueに設定します。

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. startTimer()関数内で、forループの後に、橋を元のプロパティに戻すために、橋の透明度を0.8に、CanCollideをfalseに変更します。

    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- timerDurationからカウントダウンするforループ
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- 橋を歩行不可能にする
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. 橋をリセットするために、timerTextを元のように空の文字列に変更します。そして、timerActiveブール値をfalseに設定します。

    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. プレイテストを行い、橋が複数回使用できることを確認します。

完全なタイミングブリッジスクリプト

local bridge = script.Parent
-- Explorerに入力されたボタンを取得
local button = workspace.ButtonBridge
-- ディスプレイ用のパーツを取得
local timerPart = workspace.TimerDisplay
-- タイマーを表示するテキストを取得
local timerText = timerPart.SurfaceGui.TextLabel
-- プレイヤーが橋を渡るのに必要な時間
local timerDuration = 5
local timerActive = false
local function startTimer()
print("カウントダウンが開始されました")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- timerDurationからカウントダウンするforループ
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- 橋を歩行不可能にする
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("パーツに触れました")
if humanoid and timerActive == false then
print("タイマーを開始します")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

まとめ

ループは、さまざまなインタラクション手段と組み合わせることで、楽しいゲームプレイの瞬間を作成できます。このチュートリアルでは、カウントダウンとして機能するforループを使用してタイミングブリッジを作成しました。カウントダウン中、プレイヤーは渡るための限られた時間が与えられます。

©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。