배열 소개

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

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

이 문서에서는 배열 , 특정 테이블 입력사용하여 대화 캐릭터를 생성하는 방법에 대해 설명합니다.

테이블

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

배열

다른 종류의 테이블이 있습니다. 하나는 배열 이며, 값 목록을 특정 순서로 저장합니다. 배열을 생성하려면 변수를 만들고 커리 브라켓 { } 을 할당합니다. 아래와 같은 쉼표로 구분된 값 내에 별도 값을 생성하세요.

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

말하는 캐릭터 생성

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

이 프로젝트는 대화 상자가 없지만 부분 스크립트 및 프롬프트 감지기를 포함하는 미리 만든 NPC 모델을 사용합니다.

  1. NPC 템플릿을 다운로드하십시오.

  2. In Explorer, import the NPC by right-clicking on 작업 공간 > 파일에서 다운로드 and select the downloaded file.

대화 상자 배열 코딩

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

  1. In the 탐색기 , go to NPC > ProximityPrompt > ChatManager.

  2. In ChatManager, where marked in the script, create an empty array to store dialogue options.


    -- 대화 상자에 사용할 때 채팅 대화를 순환합니다.
    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부터 시작합니다.

방금 생성된 배열에서 안녕 은 인덱스 1에 있고, 굿바이 은 인덱스 3에 있습니다.

인덱스
1안녕
2오늘은 멋진 날입니다!
3잘 가요!

특정 인덱스 값 사용

대화 상자에 특정 대화 조각을 할당하려면 인덱스 값을 사용하십시오. 특정 인덱스에 대해 값을 사용하려면 배열 이름 뒤에 인덱스를 직접 추가하십시오. 예를 들어 dialogueArray[1].

  1. 대화 상자의 기본 문자열 값을 인덱스 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() , 대화 상자 배열[2]에 있는 인덱스 번호를 변수를 만든 변수로 교체합니다.


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


    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. 대화 상자 인덱스가 종료없으면 여전히 대화 상자 인덱스에 1을 추가해야 합니다. 다른 문장 아래에 있는 dialogueIndex에 이동합니다.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    else
    dialogueIndex += 1
    end
    end
  3. 대화 상자를 재사용하여 대화를 다시 시작하도록 플레이하고 확인하십시오.

요약

데이터 구조는 데이터 집합을 저장하는 방법입니다. Lua에서는 테이블을 사용하여 데이터 구조를 만듭니다. 배열은 순서대로 정렬된 정보의 집합을 나타내는 형식의 테이블입니다. 각 값 내의 배열에는 인덱스 번호가 할당되며, 인덱스는 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)
if dialogueIndex == #dialogueArray then
dialogueIndex = 1
else
dialogueIndex += 1
end
end
prompt.Triggered:Connect(speak)

문제 해결 팁

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

  • 다른 문에서 문이 1로 설정되었는지 확인하십시오. 여기에서 문이 1을 더하면 문이 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