Pengenalan ke array

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Struktur data adalah cara para pengkode menyimpan dan mengorganisir seluruh set data. Di Luau, struktur data dibuat dengan tabel. Tabel dapat menyimpan sejumlah nilai.

Artikel ini membahas penggunaan array, jenis tabel tertentu, untuk membuat karakter yang dapat berbicara.

Tabel

Tabel adalah tipe data yang dapat menyimpan beberapa nilai. Tidak seperti tipe data lain yang menyimpan satu nilai, tabel tidak memiliki ukuran tetap dan dapat menyimpan campuran berbagai tipe nilai. Dengan tabel, Anda dapat menyimpan item dalam inventaris pemain atau membuat daftar ribuan nama pemain.

Array

Ada berbagai jenis tabel. Salah satu jenisnya adalah array, yang menyimpan daftar nilai dalam urutan tertentu. Untuk membuat array, buat variabel dan tetapkan dengan kurung kurawal { }. Pisahkan nilai di dalam kurung dengan koma seperti di bawah ini:

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

Buat karakter yang dapat berbicara

Untuk menjelajahi array, Anda akan bekerja dengan karakter non-playable (NPC) yang, ketika diklik, menunjukkan baris dialog yang berbeda.

Proyek ini akan menggunakan model NPC yang sudah dibuat sebelumnya, yang mencakup skrip sebagian dan Detektor Prompt tetapi tidak memiliki dialog.

  1. Unduh template NPC.

  2. Di Explorer, impor NPC dengan mengklik kanan pada WorkspaceInsert From File dan pilih file yang diunduh.

Kode array dialog

Langkah-langkah ini menggunakan array untuk menyimpan berbagai frasa yang akan diucapkan NPC ketika pemain berinteraksi dengannya.

  1. Di Explorer, pergi ke NPCProximityPromptChatManager.

  2. Di ChatManager, di tempat yang ditandai dalam skrip, buat array kosong untuk menyimpan opsi dialog.

    -- Mengulang dialog obrolan saat prompt digunakan
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- Tambahkan array di sini
    local dialogueArray = {}
    local function speak()
    local dialogue = "Saya hanya ingin mengatakan satu hal!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. Di dalam kurung {} dari array yang baru saja dibuat, ketik setidaknya tiga string dialog, dipisahkan dengan koma.

    local dialogueArray = {"Hai!", "Apakah saya mengenalmu?", "Selamat tinggal!"}

Gunakan indeks array

Setiap nilai dalam array diberikan nomor indeks. Indeks diberikan kepada nilai dalam urutan di mana nilai disimpan. Nilai pertama berada di indeks 1, yang kedua di indeks 2, dan seterusnya.

Beberapa bahasa pemrograman, seperti Java, memulai indeks dari 0.

Dalam array yang baru saja dibuat, "Hai" berada di indeks 1, dan "Selamat tinggal!" berada di indeks 3.

IndeksNilai
1Hai
2Hari ini adalah hari yang hebat!
3Selamat tinggal!

Gunakan nilai indeks tertentu

Gunakan nilai indeks untuk menetapkan potongan dialog tertentu kepada NPC. Untuk menggunakan nilai pada indeks tertentu, tambahkan indeks dalam kurung langsung setelah nama array, seperti dialogueArray[1].

  1. Ganti nilai string default variabel dialogue dengan indeks 2.

    local dialogueArray = {"Hai!", "Apakah saya mengenalmu?", "Selamat tinggal!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. Uji coba dan klik NPC. Nilai array kedua harus muncul di gelembung obrolan. Cobalah mengubah kode untuk menguji setiap nilai dalam tabel.

Ubah baris dialog

Ketika pemain berinteraksi dengan NPC, NPC akan selalu mengatakan baris yang sama. Itu membosankan. Sebagai gantinya, gunakan variabel untuk memperbarui nilai indeks mana yang akan digunakan.

Setiap kali pemain berinteraksi dengan NPC, tingkatkan nilai variabel sebesar 1 untuk menampilkan baris dialog berikutnya.

  1. Untuk melacak indeks saat ini, tambahkan variabel baru bernama dialogueIndex. Atur variabel tersebut ke 1 untuk memulai dari awal array.

    local dialogueArray = {"Hai!", "Apakah saya mengenalmu?", "Selamat tinggal!"}
    local dialogueIndex = 1
  2. Di speak(), ganti nomor indeks di dialogueArray[2] dengan variabel yang baru saja Anda buat.

    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. Di bagian bawah fungsi, tambahkan 1 ke dialogueIndex. Kali berikutnya speak() dipanggil, dialog akan menampilkan string berikutnya.

    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. Uji coba dan klik NPC untuk melihat setiap string dialog dari array.

Perhatikan ada kesalahan di jendela Output setelah skrip mencapai akhir array.

Anda akan memperbaikinya di bagian berikutnya sehingga dialog dimulai kembali dari awal setelah menampilkan string terakhir.

Ukuran array

Anda dapat menggunakan ukuran array untuk mengetahui kapan harus mengatur ulang indeks yang diinginkan ke 1. Temukan ukuran array dengan mengetik #, tanpa spasi, sebelum nama array.

Misalnya: #dialogueArray

Periksa ukuran array terhadap nilai variabel saat ini untuk mengetahui kapan saatnya untuk mulai kembali ke awal.

Mulai ulang dialog

Gunakan ukuran array untuk memeriksa kapan saatnya untuk kembali ke potongan dialog pertama.

  1. Tambahkan pernyataan if dan periksa apakah dialogueIndex sama dengan #dialogueArray, total ukuran array ini. Jika ya, maka atur dialogueIndex ke 1.

    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. Jika dialogueIndex tidak berada di akhir, itu harus tetap menambahkan 1 ke dialogueIndex. Pindahkan dialogueIndex += 1 di bawah pernyataan else.

    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
    end
  3. Mainkan dan konfirmasi Anda dapat berputar melalui dan memulai ulang dialog.

Ringkasan

Struktur data adalah cara set data disimpan. Luau menggunakan tabel untuk membuat struktur data. Array adalah jenis tabel yang dapat menyimpan daftar informasi yang terurut. Setiap nilai dalam array diberikan nomor indeks, dimulai dengan indeks 1.

Skrip ini menggunakan array untuk membuat daftar kemungkinan baris dialog untuk Karakter Non-Playable (NPC).

Skrip yang diselesaikan
-- Mengulang dialog obrolan saat prompt digunakan
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Tambahkan array di sini
local dialogueArray = {"Hai!", "Apakah saya mengenalmu?", "Selamat tinggal!"}
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)

Tips pemecahan masalah

Jika karakter tidak melalui array dialog, coba tips pemecahan masalah berikut.

  • Periksa pernyataan if yang mengatur dialogueIndex kembali ke 1. Dalam pernyataan else, periksa bahwa dialogueIndex memiliki 1 ditambahkan ke dirinya sendiri.
  • Saat mendapatkan ukuran array, pastikan tidak ada spasi setelah # di #dialogueArray.

Tantangan opsional

Cobalah salah satu tantangan opsional di bawah ini.

  • Kode skrip sehingga dialog NPC berjalan mundur melalui array. Indeks dialog harus dimulai dari panjang array dan mengurangi setiap kali daripada menambah.
  • Alih-alih menunjukkan dialog secara berurutan, buat NPC menunjukkan baris dialog acak setiap kali menggunakan Random.new(). Skrip contoh disertakan di bawah ini untuk referensi
local randomGenerator = Random.new()
-- Menunjukkan dialog baru setiap kali NPC diklik
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.