배열은 while 및 for와 같은 루프와 결합되어 각 인덱스 값에 대해 동일한 코드를 반복할 수 있습니다. 예를 들어, 배열의 각 플레이어를 새로운 장소로 이동시키거나 부품 배열을 불타게 만드는 것입니다.
배열을 반복적으로 탐색하기 위해 부품이 배열에 놓이고 하나씩 사라지는 사라지는 다리 경로를 만듭니다.
배열을 통한 반복
프로젝트를 위해 사라질 세 개의 부품 세트를 찾거나 생성합니다. 부품은 모두 고정되어 있어야 합니다.
세 개의 부품을 생성합니다. 부품이 사라져야 하는 순서에 따라 부품의 이름을 지정합니다: Part1, Part2, Part3.
ServerScriptService에서 새로운 스크립트를 삽입하고 부품을 저장할 배열을 만듭니다.
local pathArray = {}각각을 한 줄에 입력하여 부품의 이름을 사라져야 하는 순서대로 입력합니다. 값을 새 줄로 구분하면 읽기가 더 쉽습니다.
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)와 같은 작은 대기 시간을 추가합니다.
두 번째 루프 코딩
현재 부품이 영원히 사라집니다. 다시 나타나게 하려면, 각 부품을 탐색하고 각 부품을 즉시 걸어 다닐 수 있도록 하는 두 번째 for 루프를 만듭니다.
첫 번째 루프 다음에 짧은 지연을 만들기 위해 task.wait()를 추가합니다.
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1endtask.wait(1)스스로 두 번째 for 루프를 코딩하여 각 부품의 CanCollide 속성을 true로, Transparency를 0으로 변경하여 경로를 다시 사용할 수 있도록 시도해 보세요. 완료되면 아래 코드를 참조하여 작업을 확인하세요.
-- 모든 부품을 다시 걸어 다닐 수 있도록 경로를 재설정합니다.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.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-- 경로가 다시 나타나기 전에 1초 기다립니다.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()in ipairs(ArrayToUse)를 for 루프와 함께 사용하여 partsArray를 반복하고 입자를 추가합니다.
완성된 스크립트-- PartsFolder에 있는 부품 목록을 배열로 가져옵니다.local partsArray = partsFolder:GetChildren()-- 배열의 모든 부품에 입자를 추가합니다.for index, part in ipairs(partsArray) dolocal particles = Instance.new("ParticleEmitter")particles.Parent = partend
플레이 테스트를 하고 폴더의 모든 부품에서 입자가 떠오르는 것을 지켜보세요.
요약
루프는 배열과 결합되어 많은 값으로 빠르게 작업할 수 있습니다. 몇 가지 부품에 대해 특정 동작의 정확한 제어가 필요하다면, 배열에는 특정 값이 하드 코딩되어 있어야 합니다.
순서가 중요하지 않은 많은 부품으로 작업하려면 GetChildren()을 사용하여 객체의 자식 목록을 배열로 만들 수 있습니다. ipairs()를 사용하면 배열의 크기를 알지 못하더라도 목록을 신속하게 반복할 수 있습니다.