배열 소개

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

데이터 구조는 코더가 전체 데이터 세트를 저장하고 구성하는 방법입니다. Luau에서는 데이터 구조가 테이블로 생성됩니다. 테이블은 어떤 수의 값을 담을 수 있습니다.

이 기사에서는 배열이라는 특정 테이블 유형을 사용하여 대화하는 캐릭터를 만드는 방법을 다룹니다.

테이블

테이블은 여러 값을 담을 수 있는 데이터 유형입니다. 단일 값을 저장하는 다른 데이터 유형과 달리, 테이블은 고정 크기가 없으며 다양한 값 유형을 혼합하여 담을 수 있습니다. 테이블을 사용하면 플레이어의 인벤토리에 아이템을 저장하거나 수천 개의 플레이어 이름 목록을 생성할 수 있습니다.

배열

테이블에는 여러 유형이 있습니다. 그중 하나가 배열로, 값을 특정 순서로 저장하는 목록을 담습니다. 배열을 생성하려면 변수를 만들고 중괄호 { }를 할당합니다. 중괄호 안의 값을 쉼표로 구분합니다:

local myArray = {"item1", "item2", 10, workspace.Part, myVariable}

대화하는 캐릭터 만들기

배열을 탐색하기 위해 클릭 시 다른 대화 내용을 표시하는 NPC(Non-Playable Character)를 작업합니다.

이 프로젝트에서는 미리 제작된 NPC 모델을 사용하게 되며, 이 모델은 부분 스크립트와 프롬프트 감지기를 포함하고 있으나 대화 내용은 없습니다.

  1. 템플릿 NPC를 다운로드합니다.

  2. 탐색기에서 Workspace에서 마우스 오른쪽 버튼을 클릭하여 파일에서 삽입을 선택하고 다운로드한 파일을 선택합니다.

대화 배열 코딩하기

이 단계에서는 NPC가 플레이어와 상호작용할 때 말할 다양한 구문을 저장하기 위해 배열을 사용합니다.

  1. 탐색기에서 NPCProximityPromptChatManager로 이동합니다.

  2. ChatManager에서 스크립트에 표시된 부분에 대화 옵션을 저장할 빈 배열을 만듭니다.


    -- 프롬프트가 사용될 때 대화 내용을 순환합니다.
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- 여기에서 배열 추가
    local dialogueArray = {}
    local function speak()
    local dialogue = "말할 것이 하나 있어요!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. 방금 생성한 배열의 중괄호 {} 안에 쉼표로 구분된 최소 세 개의 문자열 대화 내용을 입력합니다.


    local dialogueArray = {"안녕하세요!", "저를 아시나요?", "안녕히 가세요!"}

배열 인덱스 사용하기

배열의 각 값은 index 번호가 할당됩니다. 인덱스는 값이 저장되는 순서에 따라 값에 할당됩니다. 첫 번째 값은 인덱스 1에, 두 번째 값은 인덱스 2에, 그리고 그 다음으로 이어집니다.

Java와 같은 일부 코딩 언어는 인덱스를 0에서 시작합니다.

방금 생성한 배열에서 "안녕하세요!"는 인덱스 1에, "안녕히 가세요!"는 인덱스 3에 있습니다.

인덱스
1안녕하세요!
2오늘은 멋진 날이에요!
3안녕히 가세요!

특정 인덱스 값 사용하기

인덱스 값을 사용하여 NPC에 특정 대화 내용을 할당합니다. 특정 인덱스의 값을 사용하려면 배열 이름 뒤에 중괄호 안에 인덱스를 추가합니다, 예를 들어 dialogueArray[1]와 같습니다.

  1. dialogue 변수의 기본 문자열 값을 인덱스 2로 교체합니다.


    local dialogueArray = {"안녕하세요!", "저를 아시나요?", "안녕히 가세요!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. 플레이 테스트를 하고 NPC를 클릭합니다. 두 번째 배열 값이 채팅 창에 표시되어야 합니다. 코드를 변경하여 배열의 각 값을 테스트해보세요.

대화 내용 변경하기

플레이어가 NPC와 상호작용할 때 NPC는 항상 같은 대사만 말합니다. 이는 지루합니다. 대신 변수 사용하여 사용할 인덱스 값을 업데이트합니다.

플레이어가 NPC와 상호작용할 때마다 변수 값을 1씩 증가시켜 다음 대화 내용이 표시되도록 합니다.

  1. 현재 인덱스를 추적하기 위해 dialogueIndex라는 새로운 변수를 추가합니다. 이 변수를 1로 설정하여 배열의 시작에서 시작합니다.


    local dialogueArray = {"안녕하세요!", "저를 아시나요?", "안녕히 가세요!"}
    local dialogueIndex = 1
  2. speak()에서, dialogueArray[2]의 인덱스 번호를 방금 생성한 변수로 교체합니다.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. 함수의 맨 아래에서 dialogueIndex에 1을 추가합니다. 다음 번에 speak()가 호출될 때 대화가 다음 문자열로 표시됩니다.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. 플레이 테스트를 하고 NPC를 클릭하여 배열의 각 대화 문자열을 확인합니다.

스크립트가 배열의 끝에 도달하면 출력 창에 오류가 발생하는 것을 주목하세요.

이는 다음 섹션에서 해결하여 마지막 문자열이 표시되면 대화 내용이 다시 시작되도록 할 것입니다.

배열 크기

배열의 크기를 사용하여 원하는 인덱스를 1로 재설정할 시기를 알 수 있습니다. 배열의 크기를 아는 방법은 배열 이름 앞에 #을 입력하면 됩니다.

예: #dialogueArray

배열의 크기를 변수의 현재 값과 비교하여 시작 시점이 되었는지 확인합니다.

대화 다시 시작하기

배열 크기를 사용하여 첫 번째 대화 내용으로 되돌아갈 시기를 확인합니다.

  1. if 문을 추가하고 dialogueIndex가 이 배열의 총 크기인 #dialogueArray와 같은지 확인합니다. 그렇다면 dialogueIndex를 1로 설정합니다.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. dialogueIndex가 끝에 도달하지 않은 경우에도 1을 dialogueIndex에 추가해야 합니다. dialogueIndex += 1을 else 문 아래로 이동합니다.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
    end
  3. 실행하고 대화가 순환되고 다시 시작할 수 있는지 확인합니다.

요약

데이터 구조는 데이터 세트를 저장하는 방법입니다. Luau는 테이블을 사용하여 데이터 구조를 생성합니다. 배열은 정보를 순서대로 담을 수 있는 테이블의 한 종류입니다. 배열 내의 각 값에는 인덱스 번호가 할당되며, 인덱스 1부터 시작합니다.

이 스크립트는 배열을 사용하여 NPC(Non-Playable Character)의 가능한 대화 내용 목록을 생성했습니다.

완료된 스크립트

-- 프롬프트가 사용될 때 대화 내용을 순환합니다.
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- 여기에서 배열 추가
local dialogueArray = {"안녕하세요!", "저를 아시나요?", "안녕히 가세요!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
end
prompt.Triggered:Connect(speak)

문제 해결 팁

캐릭터가 대화 배열을 통과하지 않는 경우 아래의 문제 해결 팁을 시도하세요.

  • dialogueIndex가 1로 재설정되는지 if 문을 확인합니다. else 문에서 dialogueIndex에 1이 추가되었는지 확인합니다.
  • 배열의 크기를 가져올 때 #dialogueArray에서 # 뒤에 공백이 없도록 하세요.

선택적 도전 과제

아래의 선택적 도전 과제 중 하나를 시도해보세요.

  • NPC의 대화가 배열을 뒤로 진행하도록 코딩합니다. 대화 인덱스는 배열 LENGTH에서 시작하고 매번 빼기만 하면 됩니다.
  • 대화를 순서대로 표시하는 대신, NPC가 매번 Random.new()를 사용하여 무작위 대사를 보여주도록 합니다. 참조할 수 있는 샘플 스크립트가 아래에 포함되어 있습니다.

local randomGenerator = Random.new()
-- NPC가 클릭될 때마다 새로운 대화를 표시합니다.
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.