このプロジェクトは、実用的な方法でループを使用する別の例です。この橋の場合、プレイヤーはボタンをタッチして、橋を期間限定で歩行できるようにします。タイマーを作成し、プレイヤーに残り時間を表示するために、ループを使用します。
プロジェクトのセットアップ
この橋は、オビーなどの移動ベースのチャレンジを含むあらゆるゲームプロジェクトに含めることができます。
パーツの作成
橋を構築する場所を見つけます。たとえば、河やオビーの大きな間격のように。以下のように アンカー 部分を 3 個作成します。
- タイマーディスプレイ
- 橋
- ボタン橋
非アクティブの場合、橋は半透明になります。これをするには、 橋 を選択し、プロパティを変更します。
- 透明度 = 0.8
- CanCollide = 偽
タイマーディスプレイを作成中
橋を渡るとき、プレイヤーは橋が消える前にどれくらいの秒が残っているかを見る必要があります。1つの画像またはテキストを表示する方法は、部品に「表面GUI」という名前のオブジェクトを追加することです。表面GUI は、ゲーム内の標識、カス
TimerDisplay を選択し、 SurfaceGui を追加します。その後、 TextLabel を親に追加します。
表面 GUI を選択します。プロパティで、次の変更を行います:
- 顔 を変更して、プレイヤーが見ているタイマーの前にあるテキストラベルを見ることができます。
テキストラベルを選択します。プロパティで、次の変更を行います:
- サイズ を{1, 0},{1, 0} に設定します。
- Set TextScaled to true。
- Set Text を空のままにします。テキストはスクリプトを使用して更新されます。
スクリプトのセットアップ
タイマーがインストールされたので、橋をコントロールし、プレイヤーにカウントダウン数を表示するスクリプトを作成します。
橋の部分で、新しいスクリプトを TimedBridge という名前で追加します。そのスクリプトで、次の変数を作成します。
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- 橋がどれくらい固く残るかlocal timerDuration = 5
タッチインタラクションのコーディング
橋を使用するには、2つの関数を作成する必要があります。1つの関数は、橋を歩行可能にし、タイマーを表示します。他の関数は、プレイヤーが橋を有効にするボタンをタップするかどうかをリスニングします。
print statement 内のプリントステートメントで新しい関数を作成し、コードをテストします。
local timerDuration = 5local function startTimer()print("Countdown started")endコード a function named buttonPressed() をコードして、buttonPressed() がボタンに触れているかどうかをチェックします。機能は partTouched のパラメータを受信し、そのパーツで人形が検出された場合、空の if statement を持つ必要があります。
local function startTimer()print("Countdown started")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendタイマーを開始するには、if 文の中の startTimer() 関数を呼び出します。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbuttonPressed() の終了時点で、ボタンの buttonPressed() イベントにボタンの関数を接続します。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)プロジェクトを実行します。パーツにタッチし、出力ウィンドウで印刷ステートメントを確認します。
トラブルシューティングのヒント
この時点で、橋が意図した通りに機能しない場合は、次の 1つを試してください。 問題 : エラーメッセージが表示されます: "... is not a valid member of workspace"。
In the TimedBridge script, スクリプトで、すべてのパーツが Explorer で見えるように正確にスペルされていることを確認します。 問題 : パーツが見えません。
3つのパーツがすべて錠付けられていることを確認してください。
橋の透明度プロパティをチェックします。
タイマーの作成
プレイヤーが橋に乗るたびに、startTimer() は橋を歩行可能にし、タイマーを開始します。タイマーが 0 に達すると、橋は歩行不可になり、落下ちることのある人を促します。
橋を歩行可能にする
開始するには、スクリプトは橋を固定するか、または可動にする必要があり、その後、タイマーを開始して歩行できなくなるまで開始します。
橋を歩行可能にするには、startTimer() で、橋の透明度プロパティを 0 (不透明) に変更し、CanCollide プロパティを true に設定します。
local function startTimer()-- 橋を見えるようにし、歩行できるようにしますbridge.Transparency = 0bridge.CanCollide = trueendカウントダウンタイマーを作成するには、次の値でループを作成します。
- 変数をコントロールする : 名前の count 、timerDuration に設定されます。
- 終了 : 0
- インクリメント : -1
local function startTimer()-- 橋を見えるようにし、歩行できるようにしますbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendプレイヤーにタイマーを表示するには、timerText にテキストを変更して、timerText.Text = count を入力してカウントを表示します。各回ループがイテレーションを通過すると、プレイヤーにカウントを表示する次の番号を表示します。
for count = timerDuration, 0, -1 dotimerText.Text = countendタスク.wait 関数を使用して、for ループを 1 秒ごとに実行するだけです。
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endゲームを実行します。ボタンをタッチすると、橋が表示され、タイマーが開始され、完了されます。
橋を再起動から保持する
ただし、ボタンを移動すると、タイマーは再起動し続けます。
これは、ボタンをタッチするたびにループを呼び出して、ループを開始するたびにループを開始するためです。タイマーを常に再起動しないようにするには、startTimer() が呼び出されるたびに許可されるかどうかを制御するボーループタイプの変数、var を追加する必要があります。 ブールーアンス は、他の変数と同じように書き込まれますが、数値や文字列を使用する代わりに、彼らは only 真または false に設定できます。この状況では、スクリプトは、タイマーが開始される前にスクリプトを true または false に設定する必要があります。
スクリプトのトップにあり、変数の下にある timerActive という名前の変数を作成し、誰もボタンを押していないので false に設定します。
local timerDuration = 5local timerActive = falselocal function startTimer()タイマーのみが開始するようにするには、timerActive ボールーンが偽であることを確認するために、buttonPressed() の if 文に追加します。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendタイマーが切れる前に startTimer() が再び実行されるのを防ぐには、ボールーン timerActive を true に設定します。
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueIn the startTimer() 関数, 後ろのループ で, 橋の透明度を 0.8 に変更して、CanCollide を false に設定します。
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- タイマーダウンからカウントダウンするループfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- 橋を歩行できなくするbridge.Transparency = 0.8bridge.CanCollide = falseend橋をリセットする最後のことは、timerText を元のように空の文字列に変更することです。その後、timerActive ボタンを偽に設定します。
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseプレイテストして、橋を複数回使用できるかどうかを確認してください。
完全なタイムドライバースクリプト
local bridge = script.Parent
-- エクスプローラーに入力されたボタンを取得します
local button = workspace.ButtonBridge
-- ディスプレイの部分を取得します
local timerPart = workspace.TimerDisplay
-- タイマーを表示するテキストを取得します
local timerText = timerPart.SurfaceGui.TextLabel
-- プレイヤーが橋を渡らなければならない時間
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- タイマーダウンからカウントダウンするループ
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("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)
概要
ループは、さまざまなインタラクションツールを組み合わせて、楽しいゲームプレイを作成できます。このチュートリアルでは、カウントダウンを実装するための時間制限付きの橋が作成されます。カウントダウン中、プレイヤーはクロスオーバーするための限定時間を与えられます。