Veri yapıları kodlayıcıların tüm veri setlerini nasıl sakladığını ve düzenlediğini gösterir.Luau'da, veri yapıları tablolarla oluşturulur. Masalar herhangi bir sayıda değer tutabilir.
Bu makale, konuşan bir karakter oluşturmak için özel bir tablo yazolan dizileri kullanmayı ele alır.

Tablolar
Masalar birden fazla değer tutabilen veri türleridir.Tek bir değer saklayan diğer veri türlerinden farklı olarak, tablolar sabit bir boyuta sahip değildir ve farklı değer türlerinin bir karışımını tutabilir.Masalarla, eşyaları bir oyuncunun envanterine saklayabilir veya binlerce oyuncu adının bir listesini oluşturabilirsiniz.
Diziler
Farklı tablo türleri vardır.Bir tür, bir dizi , belirli bir sırayla değer listeleri saklayan bir türdür.Bir dizi oluşturmak için, bir değişken oluşturun ve ona kıvrımlı parantezler atayın { } .Aşağıdaki virgüllerle parantezler arasında ayrı değerler:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Konuşan bir karakter oluştur
Dizileri keşfetmek için, tıkladığınızda farklı bir diyalog hattı gösteren bir oynanabilir olmayan karakter (NPC) ile çalışacaksınız.
Bu proje, kısmi bir senaryo ve Prompt Dedektörü içeren önceden hazırlanmış bir NPC modelini kullanacak, ancak diyalog eksik.
Araştırmada, NPC'yi sağ tıklayarak Çalışma Alanı > Dosyadan Sıkıştırın ve indirilen dosyayı seçerek ithal edin.
Bir diyalog düzeni kodlayın
Bu adımlar, NPC'nin oyuncularla etkileşim kurduğunda söyleyeceği farklı cümleleri depolamak için bir dizi kullanır.
In the Gezgin , NPC > YakınlıkPrompt > ChatManager'a gidin.
ChatManager'da, senaryoda işaretlenen yerde, diyalog seçeneklerini depolamak için boş bir dizi oluşturun.
-- İstek kullanıldığında sohbet diyaloğu arasında döngülerlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Diziyi buraya ekleyinlocal dialogueArray = {}local function speak()local dialogue = "I've got one thing to say!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Az önce oluşturulan dizinin parantezleri {} içinde, virgüllerle ayrılmış en az üç diyalog dizesi yazın.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
Dizinleri kullanın
Dizideki her değere bir index sayısı atanır.İndeksler, değerlerin saklandığı sıraya göre değerlere atanır.İlk değer indeks 1'de, ikinci indeks 2'de ve böylece devam eder.
Java gibi bazı kodlama dilleri, indeksleri 0'da başlatır.
Az önce oluşturulan dizide, "Hi" indeks 1'de ve "Goodbye!" indeks 3'te bulunur.
İndeks | Değer |
---|---|
1 | Hi |
2 | Bugün harika bir gün! |
3 | Güle güle! |
Belirli indeks değerlerini kullan
NPC'ye belirli diyalog parçaları atamak için indeks değerlerini kullanın.Belirli bir indekste bir değer kullanmak için, dizinin adından hemen sonra parantezlerle indeks ekleyin, örneğin dialogueArray[1] .
dialogue değişkenin varsayılan dize değerini indeks 2 ile değiştirin.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endOyun testi yap ve NPC'ye tıkla. İkinci dizi değeri sohbet balonunda görünmelidir. Tablodaki her değeri test etmek için kodu değiştirmeyi deneyin.
Diyalog çizgilerini değiştir
Oyuncu NPC ile etkileşim kurduğunda, NPC daima aynı satırı söyleyecektir.Bu sıkıcı.Bunun yerine, kullanılacak indeks değerini güncellemek için bir değişken kullanın.
Bir oyuncu NPC ile etkileştiğinde, önüne gelen diyalog satırını görüntülemek için değişken değerini 1 artırın.
Mevcut indeksi izlemek için, dialogueIndex adlı yeni bir değişken ekleyin. Değişkeni 1'e ayarlayın ve dizi başında başlasın.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local dialogueIndex = 1In speak() , değiştirin indeks numarasını dialogueArray[2] ile yeni oluşturduğunuz değişkenle değiştirin.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endİşlevin en altında, 1'i dialogueIndex 'ye ekleyin. Bir sonraki kez speak() çağrıldığında, diyalog bir sonraki dizigörüntüleyecektir.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endOyun testi yapın ve NPC'ye tıklayın, böylece her diyalog içeriğini diziden görün.
Senaryo düzenin sonuna ulaştığında Çıktı penceresinde bir hata olduğunu fark edin.
Sonraki bölümde bunu düzeltirsiniz, böylece diyalog son dizigösterdikten sonra baştan yeniden başlar.
Dizgi boyutları
Dizinin boyutunu kullanarak, istediğiniz indeksi 1'e sıfırlayacağınız zamanı bilirsiniz.Bir dizi adının önünde boşluk olmadan boyutu bir dizeyi bulmak için # , boşluklar olmadan, bir dizi adının önünde, bir dizi adının boyutunu bulun
Örneğin: #dialogueArray
Dizinin boyutunu değişkenin mevcut değerine karşı kontrol ederek, başlangıçta geri dönme zamanının ne zaman başlayacağını bilin.
Diyaloğu yeniden başlat
Dizinin boyutunu kullanarak ilk diyalog parçasına geri dönme zamanını kontrol edin.
Bir if ifadesi ekleyin ve dialogueIndex eşit olup olmadığını kontrol edin #dialogueArray , bu dizinin toplam boyutu. Eğer öyleyse, dialogueIndex ı 1'e ayarlayın.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endEğer dialogueIndex bitirdeğilse, hala 1 eklemelidir dialogueIndex . Diğer bir ifade altında dialogueIndex += 1 hareket ettirin.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endOynayın ve diyaloğu tekrar başlatmak için döndürebileceğinizi onaylayın.
Özet
Veri yapıları, veri setlerinin nasıl depolandığını gösterir.Luau, veri yapıları oluşturmak için tablolar kullanır.Diziler, bilgi düzenli listelerini tutabilen bir tablo türüdür.Dizinin içindeki her değer bir indeks numarasına atanır, indeks 1 ile başlayan.
Bu senaryo, Oynanabilir Olmayan Karakter (NPC) için olası diyalog çizgilerinin bir listesini oluşturmak için bir dizi kullandı.
Tamamlanmış senaryo
-- İstek kullanıldığında sohbet diyaloğu arasında döngüler
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Diziyi buraya ekleyin
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)
Sorun giderme ipuçları
Karakter diyalog düzeninin içinden geçmediyse, aşağıdaki sorun giderme ipuçlarını deneyin.
- dialogueIndex ifadesinin 1'e sıfırlandığını kontrol edin. Diğer ifadeye geçerken, dialogueIndex 'nin kendisine 1 eklediğini kontrol edin.
- Dizinin boyutunu alırken, #dialogueArray 'de #'den sonra boşluk olmadığından emin olun.
Opsiyonel zorluklar
Aşağıdaki seçenekli zorluklardan birini deneyin.
- Kodu yazın ki NPC'nin diyaloğu aracılığıyla dize geri gitmesin.DiyalogIndex, eklemek yerine her seferinde dizilere başlamalı ve eksilmelidir.
- Diyalogu sırayla göstermek yerine, NPC her seferinde Random.new() kullanarak rastgele bir diyalog çizgisi gösterir.Referans için aşağıda bir örnek kod bulunmaktadır
local randomGenerator = Random.new()
-- NPC tıklandığında yeni bir diyalog gösterir
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end