このプロジェクトは、実用的な方法でループを使用する別の例です。この橋のために、プレイヤーはボタンをタッチして、消える前に期間限定で橋を歩けるようにします。タイマーを作成し、残り時間をプレイヤーに表示するには、ループを使用します。
プロジェクトを設定する
この橋は、オビーのような動作ベースの課題を持つゲームプロジェクトに含まれることができます。
パーツを作成
川やオビーの大きなギャップのような橋を作成する場所を見つけます。以下のような 3つの アンカー付き パーツを作成します。
- タイマーディスプレイ
- ブリッジ
- ボタンブリッジ
非アクティブなとき、ブリッジは半透明になります。そのためには、 ブリッジ を選択してプロパティを変更します。
- 透明度 = 0.8
- 可能な衝突 = 偽
タイマー表示を作成
ブリッジを渡るとき、プレイヤーは橋が消えるまでどれくらいの秒が残っているかを見る必要があります。画像やテキストを表示する方法の 1つは、パーツに Surface GUI と呼ばれるオブジェクトを追加することです。 サーフェスGUI は、ゲーム内の標識、カスタムのヘルスバー、インベントリシステムを作成するのにも使用できます。このチュートリアルは迅速にこれを通り抜けますが、詳細情報は チュートリアル セクションで見つけることができます。
タイマーディスプレイを選択し、 サーフェスGUI を追加します。次に、サーフェス GUI に親を付け、 テキストラベル を追加します。
サーフェスGUIを選択します。プロパティで、次の変更を行います:
- 顔 を変更して、プレイヤーが見ているタイマーの前面にテキストラベルを表示できるようにします。
テキストラベルを選択します。プロパティで、次の変更を行います:
- Set サイズ を {1, 0},{1, 0} に設定します。
- テキストスケール を真に設定します。
- テキスト を空白に設定します。テキストはスクリプトを使用して更新されます。
スクリプトを設定する
タイマーが設プレースされたので、ブリッジを制御し、プレイヤーにカウントダウン番号を表示するスクリプトを作成します。
ブリッジ部分では、タイムドブリッジという新しいスクリプトを追加します。そのスクリプトでは、次の変数を作成します。
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- ブリッジがどれほど長く固定されるかlocal timerDuration = 5
タッチインタラクションをコード化
ブリッジを使用するには、2つの機能を作成する必要があります。1つの機能でブリッジを歩行可能にし、タイマーを表示します。他の機能は、プレイヤーがブリッジを有効にするボタンをタッチしたかどうかを聞きます。
印刷文を内部に置いた新しい関数 startTimer() を作成します。印刷文を使用してコードをテストします。
local timerDuration = 5local function startTimer()print("Countdown started")end人形がボタンに触れるかどうかをチェックする機能 buttonPressed() をコード化してください。機能は partTouched のパラメータを受け入れ、その部分にヒューマノイドが検出された場合は空の if 文を持つ必要があります。
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() 機能をボタンの Touched イベントに接続します。
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)プロジェクトを実行します。パーツにタッチし、出力ウィンドウで印刷文を確認します。
トラブルシュートのヒント
この時点で、ブリッジが意図した通りに機能しない場合は、以下のいずれかを試してください。 問題 : エラーメッセージが言っている: "... is not a valid member of workspace"。
TimedBridge スクリプトでは、すべてのパーツがエクスプローラーで見られるとおりに正確にスペルされているかどうかをチェックします。 問題 : 部品が見えません。
3つのパーツが固定されていることを確認してください。
ブリッジの透明性プロパティをチェックします。
タイマーを作成する
プレイヤーがブリッジを踏んだときには、startTimer() が橋を歩行可能にし、タイマーを開始します。タイマーが 0に達すると、ブリッジは歩行できなくなり、十分に速くない人は転落下します。
ブリッジを歩行可能にする
開始するには、スクリプトはブリッジを固定または衝突可能にし、歩行できなくなるまでタイマーを開始する必要があります。
橋を歩けるようにするには、startTimer() で、橋の透明性プロパティを 0 (不透明) に変更し、CanCollide プロパティを true に変更します。
local function startTimer()-- ブリッジを見えるようにして歩けるようにするbridge.Transparency = 0bridge.CanCollide = trueendカウントダウンするタイマーを作成するには、次の値で for ループを作成します。
- コントロール変数 : named count 、set to 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ゲームを実行します。ボタンをタッチすると、ブリッジが表示され、タイマーが開始し、完了します。
ブリッジを再起動しないようにする
注意してください、ボタンを移動しても、タイマーは再起動し続けます。
これは、ボタンをタッチするたびに for ループが呼び出され、for ループを最初から開始するためです。タイマーが常に再起動しないようにするには、startTimer() が再度呼び出されるかどうかを制御する変数のタイプであるブールを追加する必要があります。 ブール値 は、他の変数と同じように書かれますが、数字や文字列を使用するのではなく、真または偽にのみ設定できます。この状況では、スクリプトはタイマーが現在実行中かどうかをチェックするためにブールを使用します。
スクリプトのトップで、変数の下で、timerActive という名前の変数を作成し、誰もボタンを押していないので、false に設定します。
local timerDuration = 5local timerActive = falselocal function startTimer()タイマーが timerActive ブールが false になるときにのみ開始することを確認するには、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 = truestartTimer() 関数では、 後 フォーループの後、ブリッジの透明度を 0.8 に変更し、CanCollide を false に設定して、ブリッジを元のプロパティに戻します。
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- タイマー期間からカウントダウンするループFor loop that counts down from timerDurationfor 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 loop that counts down from timerDuration
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)
概要
ループは、異なる交流手段と組み合わせて、楽しいゲームプレイの瞬間を作成できます。このチュートリアルでは、カウントダウン機能を果たす for ループを使用して、時間制限付きブリッジが作成されます。カウントダウン中、プレイヤーには渡るための制限時間が与えられます。