배열 소개

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

데이터 구조 는 코더가 전체 데이터 세트를 저장하고 구성하는 방법입니다.Luau에서 데이터 구조는 테이블로 만들어집니다. 테이블 은 모든 값을 보유할 수 있습니다.

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

테이블

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

배열

테이블의 유형이 다릅니다.한 유형은 배열 로, 특정 순서의 값 목록을 저장합니다.배열을 생성하려면 변수를 만들고 굵은 괄호로 할당하십시오 { }.따옴표 내의 별도 값은 아래와 같이 쉼표로 구분합니다: Separate values within the brackets with commas like below:

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

대화하는 캐릭터 만들기

배열을 탐색하려면 클릭할 때 다른 대화 줄을 표시하는 플레이할 수 없는 캐릭터(NPC; 비플레이어 캐릭터)와 작업합니다.

이 프로젝트는 부분 스크립트와 프롬프트 감지기가 포함된 미리 만들어진 NPC 모델을 사용하지만 대화가 없습니다.

  1. 템플릿 NPC 다운로드.

  2. 탐색기에서 작업 영역 > 파일 삽입 을 마우스 오른쪽 버튼으로 클릭하여 NPC를 가져오고 다운로드된 파일을 선택합니다.

대화 배열 코드화

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

  1. 탐색기에서 NPC > 근접 프롬프트 > ChatManager로 이동합니다.

  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 = "I've got one thing to say!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. 방금 만든 배열의 괄호 {} 내에서 쉼표로 구분된 최소 3개의 대화 문자를 입력하십시오.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}

배열 인덱스 사용

배열의 각 값에는 index 번호가 할당됩니다.인덱스는 값이 저장된 순서대로 값에 할당됩니다.첫 번째 값은 인덱스 1에 있고, 두 번째는 인덱스 2에 있으며 계속됩니다.

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

방금 만든 배열에서 "Hi" 는 인덱스 1에 있고 "Goodbye!" 는 인덱스 3에 있습니다.

인덱스
1Hi
2오늘은 좋은 날입니다!
3잘 가!

특정 인덱스 값 사용

인덱스 값을 사용하여 NPC에 특정 대화 조각을 할당합니다.특정 인덱스에서 값을 사용하려면 배열 이름 바로 뒤에 괄호로 인덱스를 추가하십시오, 예를 들어 dialogueArray[1] .

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


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. 플레이테스트 및 NPC를 클릭합니다. 두 번째 배열 값이 채팅 거품에 나타납니다. 테이블의 각 값을 테스트하기 위해 코드를 변경하십시오.

대화 라인 변경

플레이어가 NPC와 상호작용할 때, NPC는 항상 동일한 라인을 말합니다.지루하네요.대신 변수를 사용하여 사용할 인덱스 값을 업데이트합니다.

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

  1. 현재 인덱스를 추적하려면 dialogueIndex라는 새 변수를 추가하십시오. 변수를 1로 설정하여 배열의 시작 부분에서 시작합니다.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. In speak() , replace 인덱스 번호를 변수로 바꾸어 dialogueArray[2] 에 새로 만든 변수로 바꾼다.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. 함수 하단에서 1을 dialogueIndex에 추가하십시오. 다음에 speak()가 호출될 때 대화 상자에 다음 문자열이 표시됩니다.


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

스크립트가 배열의 끝에 도달하면 출력 창에 오류 가 있음을 알림니다.

이 문제는 다음 섹션에서 해결하여 마지막 문자열이 표시된 후 대화가 처음부터 다시 시작됩니다.

배열 크기

배열의 크기를 사용하여 원하는 인덱스를 1로 재설정할 시기를 알 수 있습니다.배열의 이름 앞에 공백이 없이 크기 를 입력하여 배열의 크기를 찾습니다.Find the size of an array by typing # , without spaces, before an array's name.

예를 들어: #dialogueArray

배열의 크기를 변수의 현재 값과 비교하여 처음부터 다시 시작할 시기를 알 수 있습니다.

대화 재시작

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

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


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. if 가 종료없으면 여전히 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)의 대화 가능한 라인 목록을 만들었습니다.

완료된 스크립트

-- 프롬프트가 사용될 때 채팅 대화를 순환합니다
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- 여기에 배열 추가
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
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)

문제 해결 팁

캐릭터가 대화 배열을 통과하지 않으면 다음 문제 해결 팁을 시도하십시오.

  • if 문이 dialogueIndex 가 1로 설정되었는지 확인하십시오. else 문에서 dialogueIndex 가 자체에 1이 추가되었는지 확인하십시오.
  • 배열의 크기를 가져올 때, # 다음에 공백이 없는지 확인하십시오 #dialogueArray .

선택적 도전

아래의 선택적 도전 중 하나를 시도하십시오.

  • NPC의 대화가 배열을 통해 역방향으로 이동하도록 스크립트를 코드합니다.대화 인덱스는 배열에서 시작하고 매번 더하는 대신 빼야 합니다.
  • 대화를 순서대로 표시하는 대신, 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