配列は、whileやforなどのループと組み合わせて、各インデックス値に対して同じコードを繰り返すことができます。たとえば、配列内の各プレイヤーを新しい場所にテレポートさせたり、部品の配列を燃やしたりすることができます。
配列をループ処理する方法を探るために、部品を配列に配置し、1つずつ消える消える橋の道を作成します。
配列をループ処理する
プロジェクトのために、消える3つの部品のセットを見つけるか作成します。部品はすべてアンカーされている必要があります。
3つの部品を作成します。部品の名前は、消える順番にPart1、Part2、Part3とします。
ServerScriptServiceに新しいスクリプトを挿入し、部品を格納するための配列を作成します。
local pathArray = {}各部品の名前を消える順番で1行ずつ入力します。各値に新しい行を使用すると、読みやすくなります。
local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3,}
配列を使用したforループ
forループを使用して配列を通過し、部品が配列内のインデックス順にどれくらいの速さで消えるかを制御します。
部品が消える間隔を秒単位で制御するために、VANISH_RATEという名前の変数を作成します。テストのためには、小さな数値に保つのが最適です。
local VANISH_RATE = 1.5local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3}次のようにforループを作成します:開始: partIndex = 1、配列内の最初の値のインデックス。終了: #pathArray、その配列のサイズ。
for partIndex = 1, #pathArray doend部品が消える前に遅延を作るために、ループ内にtask.wait()を追加し、VANISH_RATEを使用します。
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)end部品を消すために、whichPartという名前の新しい変数を作成し、それをpartsArray[partIndex]に設定します。その後、その部品を消すために、CanCollideプロパティをfalseに設定し、Transparencyを1に設定します。
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end時間の経過とともに道の部品が消えることを確認します。
トラブルシューティングのヒント
橋が消えない場合は、以下の可能性のある問題を確認してください。
問題: 部品が速すぎて消えるか、最初からすべて消えている。
- キャラクターがゲームにロードされる速さによって、最初の部品がすでに見えなくなっている可能性があります。これに対処するために、スクリプトの最初にtask.wait(2)のような小さな待機を追加します。
2番目のループをコーディングする
現在、部品は永遠に消えます。再び現れるようにするために、各部品を通過し、各部品を即座に歩行可能にする2番目のforループを作成します。
最初のループの後に、道が再び現れる前に短い遅延を作成するためにtask.wait()を追加します。
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1endtask.wait(1)自分で、各部品のCanCollideプロパティをtrueに、Transparencyを0に変更して道を再び使用可能にする2番目のforループをコーディングしてみてください。完了したら、以下のコードと照らし合わせて確認してください。
-- 道をリセットしてすべての部品を再び歩行可能にするfor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endプロジェクトをテストして、すべての部品が消えた後に再び現れることを確認します。
whileループで繰り返す
部品は消えたり再び現れたりしますが、一度だけです。コードを繰り返し実行するために、すべてのコードをwhileループ内にネストします。
スクリプトの下部に新しいwhile true doループを作成します。次に、両方のforループをwhileループに移動します。
while true do-- 配列から順番に部品を消すfor partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end-- 道が再び現れる前に1秒待つtask.wait(1)-- 道をリセットしてすべての部品を再び歩行可能にするfor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endendすべての部品が消えた後に再び現れることを確認します。
プロジェクトの完成版をダウンロードできます。
local VANISH_RATE = 1.0
local pathArray = {
workspace.Part1,
workspace.Part2,
workspace.Part3,
}
while true do
-- 配列から順番に部品を消す
for partIndex = 1, #pathArray do
task.wait(VANISH_RATE)
local whichPart = pathArray[partIndex]
whichPart.CanCollide = false
whichPart.Transparency = 1
end
-- 道が再び現れる前に1秒待つ
task.wait(1.0)
-- 道をリセットしてすべての部品を再び歩行可能にする
for partIndex = 1, #pathArray do
local whichPart = pathArray[partIndex]
whichPart.CanCollide = true
whichPart.Transparency = 0
end
end配列とipairs()
ipairs()は配列と一緒に使用されます。ipairs()の「i」は「インデックス」を意味します。ipairs()は、多くのオブジェクトに対して操作を迅速に繰り返すために使用できます。たとえば、部品のフォルダー全体に対してです。
これは、部品のフォルダー全体に粒子を迅速に追加することで示されます。
WorkspaceにPartsFolderという名前のフォルダーを作成します。好きなだけ部品を追加します。
ServerScriptServiceに新しいスクリプトを作成し、フォルダーを参照します。
GetChildren()を使用して、フォルダー内のすべてのオブジェクトの配列を自動的に取得します。
local partsFolder = workspace.PartsFolder-- PartsFolder内の部品の配列を取得local partsArray = partsFolder:GetChildren()forループでin ipairs(ArrayToUse)を使用してpartsArrayを通過し、粒子を追加します。
完成したスクリプト-- PartsFolder内の部品の配列を取得local partsArray = partsFolder:GetChildren()-- 配列内のすべての部品に粒子を追加for index, part in ipairs(partsArray) dolocal particles = Instance.new("ParticleEmitter")particles.Parent = partend
プレイテストを行い、フォルダー内のすべての部品から粒子が浮かび上がるのを見てください。
まとめ
ループは配列と組み合わせて、任意の数の値を迅速に処理できます。特定の部品に対して何が起こるか、どの順番で起こるかを正確に制御したい場合は、配列を特定の値でハードコーディングする必要があります。
順序が重要でない多くの部品を扱う場合、GetChildren()を使用してオブジェクトの子供の配列を作成できます。ipairs()を利用することで、配列のサイズを知らなくてもリストを迅速に反復処理できます。