데이터 구조 는 코더가 전체 데이터 세트를 저장하고 구성하는 방법입니다.Luau에서 데이터 구조는 테이블로 만들어집니다. 테이블 은 모든 값을 보유할 수 있습니다.
이 문서에서는 특정 테이블 입력 배열 을 사용하여 대화 캐릭터를 만드는 방법을 다룹니다.

테이블
테이블 은 여러 값을 저장할 수 있는 데이터 유형입니다.단일 값을 저장하는 다른 데이터 유형과 달리 테이블에는 고정된 크기가 없으며 다양한 값 유형의 혼합을 보유할 수 있습니다.테이블을 사용하면 플레이어의 인벤토리에 아이템을 저장하거나 수천 개의 플레이어 이름 목록을 만들 수 있습니다.
배열
테이블의 유형이 다릅니다.한 유형은 배열 로, 특정 순서의 값 목록을 저장합니다.배열을 생성하려면 변수를 만들고 굵은 괄호로 할당하십시오 { }.따옴표 내의 별도 값은 아래와 같이 쉼표로 구분합니다: Separate values within the brackets with commas like below:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
대화하는 캐릭터 만들기
배열을 탐색하려면 클릭할 때 다른 대화 줄을 표시하는 플레이할 수 없는 캐릭터(NPC; 비플레이어 캐릭터)와 작업합니다.
이 프로젝트는 부분 스크립트와 프롬프트 감지기가 포함된 미리 만들어진 NPC 모델을 사용하지만 대화가 없습니다.
탐색기에서 작업 영역 > 파일 삽입 을 마우스 오른쪽 버튼으로 클릭하여 NPC를 가져오고 다운로드된 파일을 선택합니다.
대화 배열 코드화
이 단계에서는 배열을 사용하여 NPC가 플레이어가 상호작용할 때 말할 수 있는 다양한 문구를 저장합니다.
탐색기에서 NPC > 근접 프롬프트 > ChatManager로 이동합니다.
ChatManager에서 스크립트에서 표시된 곳에서 빈 배열 을 생성하여 대화 옵션을 저장합니다.
-- 프롬프트가 사용될 때 채팅 대화를 순환합니다local Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- 여기에 배열 추가local dialogueArray = {}local function speak()local dialogue = "I've got one thing to say!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)방금 만든 배열의 괄호 {} 내에서 쉼표로 구분된 최소 3개의 대화 문자를 입력하십시오.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
배열 인덱스 사용
배열의 각 값에는 index 번호가 할당됩니다.인덱스는 값이 저장된 순서대로 값에 할당됩니다.첫 번째 값은 인덱스 1에 있고, 두 번째는 인덱스 2에 있으며 계속됩니다.
자바와 같은 일부 코딩 언어는 0에서 인덱스를 시작합니다.
방금 만든 배열에서 "Hi" 는 인덱스 1에 있고 "Goodbye!" 는 인덱스 3에 있습니다.
인덱스 | 값 |
---|---|
1 | Hi |
2 | 오늘은 좋은 날입니다! |
3 | 잘 가! |
특정 인덱스 값 사용
인덱스 값을 사용하여 NPC에 특정 대화 조각을 할당합니다.특정 인덱스에서 값을 사용하려면 배열 이름 바로 뒤에 괄호로 인덱스를 추가하십시오, 예를 들어 dialogueArray[1] .
dialogue 변수의 기본 문자열 값을 인덱스 2로 바꿉니다.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)end플레이테스트 및 NPC를 클릭합니다. 두 번째 배열 값이 채팅 거품에 나타납니다. 테이블의 각 값을 테스트하기 위해 코드를 변경하십시오.
대화 라인 변경
플레이어가 NPC와 상호작용할 때, NPC는 항상 동일한 라인을 말합니다.지루하네요.대신 변수를 사용하여 사용할 인덱스 값을 업데이트합니다.
플레이어가 NPC와 상호작용할 때마다 변수 값을 1 증가시켜 다음 대화 줄을 표시합니다.
현재 인덱스를 추적하려면 dialogueIndex라는 새 변수를 추가하십시오. 변수를 1로 설정하여 배열의 시작 부분에서 시작합니다.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local dialogueIndex = 1In speak() , replace 인덱스 번호를 변수로 바꾸어 dialogueArray[2] 에 새로 만든 변수로 바꾼다.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)end함수 하단에서 1을 dialogueIndex에 추가하십시오. 다음에 speak()가 호출될 때 대화 상자에 다음 문자열이 표시됩니다.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1end플레이테스트 및 NPC를 클릭하여 배열에서 각 대화 문자열을 확인합니다.
스크립트가 배열의 끝에 도달하면 출력 창에 오류 가 있음을 알림니다.
이 문제는 다음 섹션에서 해결하여 마지막 문자열이 표시된 후 대화가 처음부터 다시 시작됩니다.
배열 크기
배열의 크기를 사용하여 원하는 인덱스를 1로 재설정할 시기를 알 수 있습니다.배열의 이름 앞에 공백이 없이 크기 를 입력하여 배열의 크기를 찾습니다.Find the size of an array by typing # , without spaces, before an array's name.
예를 들어: #dialogueArray
배열의 크기를 변수의 현재 값과 비교하여 처음부터 다시 시작할 시기를 알 수 있습니다.
대화 재시작
배열 크기를 사용하여 첫 번째 대화 조각으로 돌아갈 시기를 확인합니다.
if 문을 추가하고 이 배열의 총 크기가 dialogueIndex인지 확인합니다. 그렇다면 #dialogueArray에 dialogueIndex을 1로 설정합니다.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endif 가 종료없으면 여전히 1을 에 추가해야 합니다. else 문 아래로 이동합니다.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1end플레이하고 대화를 순환하고 다시 시작할 수 있는지 확인합니다.
요약
데이터 구조는 데이터 세트가 저장되는 방법입니다.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