時間制限のある橋を作る練習

*このコンテンツは、ベータ版の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. 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. プロジェクトを実行します。パーツに触れ、出力ウィンドウでprint文を確認します。

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

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

問題:エラーメッセージが表示されます:"...はworkspaceの有効なメンバーではありません"

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

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

  • すべてのパーツがAnchoredになっていることを確認してください。
  • 橋の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. task.wait関数を使用して、forループが1秒に1回のみ実行されるようにします。


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

橋が再起動するのを防ぐ

ただし、ボタンの上で動き回ると、タイマーが再び始まります。

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

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

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


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


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. タイマーがタイマーの終了前に再度実行されないようにするために、boolean 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 booleanを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は、米国並びにその他の国における登録商標および非登録商標です。