배열은 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.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()를 활용하면 배열의 크기를 알지 못해도 목록을 빠르게 반복할 수 있습니다.