중첩 루프

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

루프를 중첩하면 작업을 배치로 반복할 수 있습니다. 예를 들어, 컵케이크 3배치를 구우거나 두 팀의 플레이어에게 무기를 배정하는 경우입니다.

중첩 루프의 작동 방법

루프가 중첩되면 스크립트는 한 줄씩 실행하다가 다음 루프에 도달할 때까지 진행합니다. 내부 루프는 자신의 조건이 충족될 때까지 실행된 후 외부 루프로 돌아갑니다.

중첩 루프 로직

다음 다이어그램은 루프가 수행하는 단계를 보여줍니다.

  • 외부 루프: 코드가 한 줄씩 실행되며 내부 루프에 도달할 때까지 진행합니다.
  • 외부 루프: 코드가 한 줄씩 실행되며 내부 루프에 도달할 때까지 진행합니다.
  • 외부 루프: 코드가 한 줄씩 실행되며 내부 루프에 도달할 때까지 진행합니다.

중첩 루프 예제

중첩 루프는 다소 추상적으로 보일 수 있으므로, 시각적인 예제가 도움이 될 수 있습니다. 이 연습을 위해 샘플 스크립트를 복사해서 Studio에서 실행해 보세요. 이 스크립트는 파트의 타워를 생성합니다. 외부 루프는 만들 파트 수를 제어하고, 내부 루프는 실제 배치를 생성합니다.

  1. ServerScriptService에 PartMaker라는 새 스크립트를 생성하고 아래 코드를 복사합니다.


    local numberOfBatches = 7
    local partsPerBatch = 5
    local partsMade = 0
    -- 하나의 큐브를 만듭니다
    local function createPart()
    local part = Instance.new("Part")
    part.Size = Vector3.new(2, 2, 2)
    part.CFrame = CFrame.new(20, 0, 20)
    part.Color = currentColor
    part.Parent = workspace
    end
    -- 외부 루프
    for partBatch = 1, numberOfBatches do
    print("상단 외부 루프: 파트 배치 " .. partBatch)
    currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
    -- 내부 루프
    for partNumber = 1, partsPerBatch do
    createPart()
    print("내부 루프: 파트 " .. partNumber)
    partsMade += 1
    task.wait(0.5)
    end
    print("하단 외부 루프: " .. partsMade .. " 개의 파트가 생성되었습니다.")
    task.wait(2)
    end
  2. 스크립트가 색상 있는 파트의 배치를 생성하는 것을 지켜보세요. 한 배치를 거친 후에는 2초간 일시 정지합니다. 외부 루프의 print 문은 완료된 내부 루프당 한 번만 실행됩니다.

중첩 for 루프 타워

각 루프는 자신만의 코드 세트를 가지고 있으므로 서로 다른 작업을 수행할 수 있습니다. 중첩 루프가 할 수 있는 한 가지는 물체가 생성되는 위치를 변경하여 이 비디오와 같은 타워를 만드는 것입니다. 타워의 폭, 길이 및 높이를 제어하는 각각의 루프가 있습니다.

큐브 생성기 스크립트 코딩

중첩 루프를 연습하기 위해 큐브 타워를 생성하는 스크립트를 만들 것입니다. 큐브 타워 스크립트에서 먼저 단일 큐브를 생성하는 함수를 코딩합니다. 이 타워는 이 함수를 반복 호출하여 만들어질 것입니다.

스크립트 설정

큐브 타워 스크립트를 위해 먼저 단일 큐브를 생성하는 함수를 코딩합니다. 이 타워는 이 함수를 반복 호출하여 만들어질 것입니다.

  1. PartMaker 스크립트를 삭제 하거나 비활성화합니다 (스크립트 속성에서 Disabled 체크). 그렇지 않으면 같은 장소에서 두 개의 스크립트가 동시에 파트를 만들게 됩니다.

  2. TowerBuilder라는 새 스크립트를 생성합니다. 타워 크기와 큐브 크기에 대한 변수를 상단에 추가합니다.


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
  3. makeCube()라는 로컬 함수를 추가하여 CUBE_SIZE를 사용하여 단일 정사각형 큐브를 생성합니다.


    local TOWER_SIZE = 4
    local CUBE_SIZE = 2
    -- 개별 큐브를 생성합니다
    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    end
  4. 큐브의 색상을 중첩 루프 내에서 업데이트될 변수로 설정합니다.


    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    end
  5. 마지막으로, 새 큐브를 작업 공간의 부모로 설정하여 나타나도록 합니다.


    local function makeCube()
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    cube.Parent = workspace
    end

다양한 방향으로 생성하기

타워를 만들기 위해 각 큐브의 X, Y, Z 속성을 설정하여 특정 지점에서 큐브를 생성합니다. X와 Z는 가로로, Y는 세로로 설정합니다.

  1. makeCube() 내부에 spawnX, spawnY, spawnZ에 대한 매개변수를 추가합니다. 이 숫자는 각 새 큐브의 생성 위치를 설정합니다.


    -- 개별 큐브를 생성합니다
    local function makeCube(spawnX, spawnY, spawnZ)
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    cube.Parent = workspace
    end
  2. 함수 내에서 큐브의 CFrame 속성을 spawnX, spawnY, spawnZ 매개변수를 사용하여 새로운 CFrame으로 설정합니다.


    local function makeCube(spawnX, spawnY, spawnZ)
    local cube = Instance.new("Part")
    cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
    cube.Color = currentColor
    cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
    cube.Parent = workspace
    end

중첩 루프를 이용한 생성하기

스크립트에는 총 세 개의 루프가 있으며, 각각은 타워의 길이, 폭 및 높이를 제어합니다. 위로 이동하기 전에 전체 층을 완료하려면 가장 바깥쪽 루프에서 Y 좌표를 설정하여 시작합니다.

  1. makeCube() 함수 아래에 각 큐브가 얼마나 높이에서 생성되는지를 설정하는 for 루프를 만듭니다.

    • 제어 변수: heightIndex = 1
    • 종료점: TOWER_SIZE
    • 루프 안에 추가: local spawnY = (heightIndex - 1) * CUBE_SIZE

    -- 타워를 구축합니다
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    end
  2. 높이에 대한 첫 번째 루프가 끝나면 두 번째 루프를 시작합니다. 첫 번째 for 루프 내에 큐브를 타워의 길이에 설정하는 새 for 루프를 추가합니다.

    • 제어 변수: lengthIndex = 1
    • 종료점: TOWER_SIZE
    • 그 루프 내부에 추가: local spawnX = lengthIndex * CUBE_SIZE

    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    end
    end
  3. 두 번째 루프 안에 타워 을 위한 세 번째 for 루프를 추가합니다. 이 마지막 루프에서 makeCube()를 호출하고 X, Y, Z 매개변수를 전달합니다.

    • 제어 변수: widthIndex = 1
    • 종료점: TOWER_SIZE
    • 루프 내부에 추가:
      • local spawnZ = widthIndex * CUBE_SIZE
      • makeCube(spawnX, spawnY, spawnZ)
      • 타워 세우는 것을 지켜볼 수 있도록 0.25초의 대기 시간을 추가합니다.

    -- 타워를 구축합니다
    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    for widthIndex = 1, TOWER_SIZE do
    local spawnZ = widthIndex * CUBE_SIZE
    makeCube(spawnX, spawnY, spawnZ)
    task.wait(0.25)
    end
    end
    end
  4. 각 층마다 무작위 색상이 지정되도록 하려면 currentColor를 새층을 만들 때 같은 루프 내에서 무작위 RGB 숫자로 변경합니다.


    for heightIndex = 1, TOWER_SIZE do
    local spawnY = (heightIndex - 1) * CUBE_SIZE
    currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
    for lengthIndex = 1, TOWER_SIZE do
    local spawnX = lengthIndex * CUBE_SIZE
    for widthIndex = 1, TOWER_SIZE do
    local spawnZ = widthIndex * CUBE_SIZE
    makeCube(spawnX, spawnY, spawnZ)
    task.wait(0.25)
    end
    end
    end
  5. 프로젝트를 실행하여 오류 없이 전체 타워가 생성되는 것을 확인하세요.

선택적 도전 과제

다양한 방법으로 중첩 루프를 사용하는 다양한 자기 주도적인 도전 과제가 아래에 나와 있습니다. 솔루션을 보기 전에 스스로 코딩해 보세요.

부분이 사라지도록 하기

타워가 구축되는 동안 파트가 왼쪽에서 오른쪽으로 투명도가 줄어들도록 합니다.

코드 솔루션은 아래와 같습니다.


local TOWER_SIZE = 6
local CUBE_SIZE = 2
-- 개별 큐브를 생성합니다
local function makeCube(spawnX, spawnY, spawnZ)
local cube = Instance.new("Part")
cube.Size = Vector3.new(CUBE_SIZE, CUBE_SIZE, CUBE_SIZE)
cube.Color = currentColor
cube.Transparency = cubeTransparency -- 투명도 설정
cube.CFrame = CFrame.new(spawnX, spawnY, spawnZ)
cube.Parent = workspace
end
-- 타워를 구축합니다
for heightIndex = 1, TOWER_SIZE do
local spawnY = (heightIndex - 1) * CUBE_SIZE
currentColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
for lengthIndex = 1, TOWER_SIZE do
local spawnX = lengthIndex * CUBE_SIZE
cubeTransparency = (lengthIndex - 1) * 0.10 -- 0에서 시작하여 매 루프마다 업데이트
for widthIndex = 1, TOWER_SIZE do
local spawnZ = widthIndex * CUBE_SIZE
makeCube(spawnX, spawnY, spawnZ)
task.wait(0.05)
end
end
end

물체 하강시키기

파트 대신 실제 개체를 생성해 보세요. 여기서 예시는 컵케이크를 사용했습니다.

스스로 다음을 시도해 보세요:

  • 기본 파트로 개체를 생성합니다. 모든 파트를 용접하여 개체가 무너지지 않도록 합니다.
  • 개체를 ServerStorage에 배치합니다.
  • 중첩 루프 예제에서 파트 대신 개체를 사용하도록 PartMaker를 수정합니다.

샘플은 여기에 나타나 있습니다.

컵케이크를 사용하는 코드 솔루션이 포함되어 있습니다.


local numberOfBatches = 30
local cupcakesPerBatch = 6
local cupcakesBaked = 0
-- 하나의 컵케이크를 만듭니다
local function makeCupcake()
local ServerStorage = game:GetService("ServerStorage")
local cupcake = ServerStorage.Cupcake:Clone()
local cup = cupcake.Cup
local frosting = cupcake.Frosting
cupcake:SetPrimaryPartCFrame(CFrame.new(0, 20, 0) * CFrame.Angles(0, 0, -90))
frosting.Color = frostingColor
cup.Color = cupColor
cupcake.Parent = workspace
end
-- 외부 루프
for cupcakeBatch = 1, numberOfBatches do
print("상단 외부 루프: 컵케이크 배치 " .. cupcakeBatch)
frostingColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
cupColor = Color3.fromRGB(math.random(0, 255), math.random(0, 255), math.random(0, 255))
-- 내부 루프
for cupcakeNumber = 1, cupcakesPerBatch do
makeCupcake()
print("내부 루프: 컵케이크 " .. cupcakeNumber)
-- 구운 컵케이크 추적
cupcakesBaked += 1
task.wait(0.5)
end
print("하단 외부 루프: " .. cupcakesBaked .. " 컵케이크가 구워졌습니다.")
end

요약

더 복잡한 작업을 수행하려면 프로그래머가 여러 루프와 심지어 다양한 유형의 루프를 결합하는 것이 유용하다는 것을 알게 될 것입니다. 모든 루프는 중첩될 수 있으며, 이는 하나의 루프가 다른 루프 안에 있음을 의미합니다. 중첩 루프는 다른 루프와 동일한 논리를 따릅니다. 가장 외부 루프에서 시작하여 내부 루프를 통해 작업을 실행하고, 적용 가능한 경우 첫 번째 루프로 다시 돌아갑니다.

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.