Struktur data adalah cara pengkode menyimpan dan mengatur seluruh set data. Di Lua, struktur data dibuat dengan tabel. Tabel dapat menampung berapa pun jumlah nilai.
Artikel ini mencakup penggunaan array , jenis tabel ketik, untuk membuat karakter yang berbicara.
Tabel
Tabel adalah jenis data yang dapat menyimpan beberapa nilai. Berbeda dengan jenis data lain yang menyimpan nilai tunggal, tabel tidak memiliki ukuran tetap dan dapat menyimpan campuran jenis nilai yang berbeda. Dengan tabel, Anda dapat menyimpan item di inventaris pemain atau membuat daftar ribuan nama pemain.
Matriks
Ada beberapa jenis tabel. Salah satu jenis adalah array, yang menyimpan daftar nilai dalam urutan tertentu. Untuk membuat array, buat variabel dan asignya curly brackets { } . Separate nilai dalam brackets dengan koma seperti di bawah ini:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Membuat Karakter Berbicara
Untuk menjelajahi matriks, Anda akan bekerja dengan karakter non-playable (NPC) yang, ketika diklik, menunjukkan baris dialog yang berbeda.
Proyek ini akan menggunakan model NPC pra-dibuat, yang termasuk script bagian dan Detektor Prompt tetapi kekurangan dialog.
Di Explorer, impor NPC dengan menyetel ulang tombol kanan pada Workspace > Import dari File dan pilih file yang diunduh.
Mengkode Matriks R대화
Langkah-langkah ini menggunakan matriks untuk menyimpan frasa yang berbeda untuk NPC untuk dikatakan ketika pemain berinteraksi dengannya.
Dalam Explorer , pergi ke NPC > ProximityPrompt > ChatManager.
Di ChatManager, di mana ditandai dalam script, buat array kosong untuk menyimpan opsi dialog.
-- Siklus melalui dialog obrolan saat prompt digunakanlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Tambahkan array di sinilocal dialogueArray = {}local function speak()local dialogue = "I've got one thing to say!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Dalam huruf {} dari array baru saja dibuat, tulis setidaknya tiga string dialog, dibedakan oleh koma.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
Menggunakan Indeks Arrays
Setiap nilai dalam array diberi nomor index . Indeks diberikan kepada nilai dalam urutan di mana nilai disimpan. Nilai pertama adalah di indeks 1, nilai kedua di indeks 2, dan seterusnya.
Beberapa bahasa pemrograman, seperti Java, memulai indeks pada 0.
Dalam array baru saja dibuat, "Hi" berada di indeks 1, dan "Goodbye!" berada di indeks 3.
Indeks | Nilai |
---|---|
1 | Halo |
2 | Hari ini adalah hari yang indah! |
3 | Selamat tinggal! |
MenggunakanNilai Indeks Khusus
Gunakan nilai indeks untuk menetapkan potongan dialog tertentu ke NPC. Untuk menggunakan nilai di indeks tertentu, tambahkan indeks di braket langsung setelah nama array, seperti dialogueArray[1] .
Ganti nilai dialogue variabel dengan nilai indeks 2.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endMainkan dan klik NPC.Nilai array kedua harus muncul di gelembung chat.Coba ubah kode untuk menguji setiap nilai di tabel.
Mengubah Garis Dialog
Ketika pemain berinteraksi dengan NPC, NPC akan selalu mengatakan baris yang sama. Itu membosankan. Sebaliknya, gunakan variabel untuk diperbarui mana nilai indeks yang akan digunakan.
Setiap kali seorang pemain berinteraksi dengan NPC, tingkatkan nilai variabel sebesar 1 untuk menunjukkan garis dialog berikutnya.
Untuk melacak indeks saat ini, tambahkan variabel baru bernama dialogueIndex . Tetapkan variabel ke 1 untuk dimulai di awal daftar.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local dialogueIndex = 1Dalam 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)endPada bagian bawah fungsi, tambahkan 1 untuk dialogueIndex. Lain kali speak() dipanggil, dialog akan menampilkan string berikutnya.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endMainkan dan klik NPC untuk melihat setiap string dialog dari array.
Perhatikan ada kesalahan di Jendela Keluar setelah script mencapai akhir dari array.
Anda akan memperbaiki ini di bagian berikutnya sehingga dialog dimulai dari awal setelah menunjukkan string terakhir.
Ukuran Matriks
Anda dapat menggunakan ukuran array untuk mengetahui kapan harus mengatur ulang indeks yang diinginkan menjadi 1. Temukan ukuran dari array dengan mengetik #, tanpa spasi, sebelum nama array.
Sebagai contoh: #dialogueArray
Periksa ukuran matriksnya terhadap nilai variabel saat ini untuk mengetahui kapan waktunya untuk memulai kembali di awal.
Mengakhiri Dialog
Gunakan ukuran array untuk memeriksa kapan waktunya untuk siklus kembali ke bagian pertama dari dialog.
Tambahkan if statement dan periksa apakah dialogueIndex Equals #dialogueArray , total ukuran array ini. Jika ya, maka tetapkan dialogueIndex ke 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endJika dialogueIndex tidak di akhiri, itu masih harus menambahkan 1 ke dialogueIndex . Pindahkan dialogueIndex += 1 di bawah pernyataan lain.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1elsedialogueIndex += 1endendMainkan dan konfirmasi bahwa Anda dapat berjalan melalui dan memulihkan dialog.
Sintesis
Data struktur adalah cara set data di penyimpanan. Lua menggunakan tabel untuk membuat struktur data. Arrays adalah jenis tabel yang dapat menyimpan daftar urutan informasi. Setiap nilai dalam array diberi nomor indeks, dimulai dengan indeks 1.
Skrip ini menggunakan matriks untuk membuat daftar garis dialog yang mungkin untuk Karakter Non-Playable (NPC).
Skrip yang selesai
-- Siklus melalui 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 = {"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)
Tips Troubleshoot
Jika karakter tidak pergi melalui array dialog, coba tips berikut ini.
- Periksa jika pernyataan bahwa dialogueIndex dikembalikan ke 1. Dalam pernyataan else, periksa bahwa dialogueIndex telah 1 ditambahkan ke dirinya sendiri.
- Ketika mendapatkan ukuran array, pastikan ada ruang setelah # di #dialogueArray .
Tantangan Opsional
Coba salah satu tantangan op션 di bawah ini.
- Kode script sehingga dialog NPC berjalan mundur melalui array. DialogIndex harus dimulai di array dan mengurangi setiap kali bukan menambahkan.
- Alih-alih menunjukkan dialog dalam urutan, NPC menunjukkan garis dialog acak setiap kali menggunakan Random.new() . Sebuah script contoh di included di bawah ini untuk mengacu
local randomGenerator = Random.new()
-- Menunjukkan dialog baru setiap kali NPC di klik
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end