配列は、whileやforなどのループと組み合わせて、各インデックス付きの値に対して同じコードを繰り返すことができます。たとえば、配列内の各プレイヤーを新しい場所にテレポートさせたり、部品の配列を燃やしたりすることができます。
配列をループする方法を探るために、部品が配列に配置され、一つずつ消えていく消える橋の道を作成します。
配列をループする
プロジェクトのために、消えるための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ループで繰り返す
部品は消えたり再現したりしますが、1回限りです。コードが繰り返し動作するように、すべてのコードを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-- 道を再び現す前に待機しますtask.wait(1)-- 構造をリセットしてすべての部品を再び歩行可能にするfor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endendすべての部品が消えたら、再現することを確認します。
プロジェクトの完成版をダウンロードできます。
完成したスクリプトlocal VANISH_RATE = 1.0local pathArray = {workspace.Part1,workspace.Part2,workspace.Part3,}while true do-- 配列から部品を順番に消しますfor partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end-- 道を再び現す前に待機しますtask.wait(1.0)-- 構造をリセットしてすべての部品を再び歩行可能にするfor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endend
配列と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()を使用することで、配列のサイズを知らなくても、リストを迅速に反復することができます。