Veri yapıları, kodlayıcıların tüm veri setlerini saklama ve düzenleme biçimidir. Luau'da veri yapıları, tablolarla oluşturulur. Tablolar, herhangi bir sayıda değeri tutabilir.
Bu makale, konuşan bir karakter oluşturmak için belirli bir tablo türü olan dizileri kullanmayı kapsar.

Tablolar
Tablolar, birden fazla değeri tutabilen veri türleridir. Tek bir değeri saklayan diğer veri türlerinin aksine, tabloların sabit bir boyutu yoktur ve farklı değer türlerini bir arada tutabilir. Tablolarla, bir oyuncunun envanterindeki eşyaları saklayabilir veya binlerce oyuncu adının listesini oluşturabilirsiniz.
Diziler
Farklı tipte tablolar vardır. Bir türü, belirli bir sırada değer listeleri saklayan bir dizidir. Bir dizi oluşturmak için bir değişken oluşturun ve ona süslü parantezler { } atayın. Parantez içindeki değerleri virgüllerle ayırın:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Konuşan bir karakter oluşturma
Dizileri keşfetmek için, istenildiğinde farklı bir diyalog satırı gösteren bir kullanılmaz karakter (NPC) ile çalışacaksınız.
Bu proje, bir diyalog içermeyen, ancak kısmi bir script ve Prompt Algılayıcı içeren önceden yapılmış bir NPC modelini kullanacaktır.
Keşifci'de, NPC'yi sağ tıklayıp Çalışma Alanı ⟩ Dosyadan Ekle seçeneğini seçerek içe aktarın ve indirilen dosyayı seçin.
Diyalog dizisini kodlama
Bu adımlar, oyuncular NPC ile etkileşime geçtiğinde söylemesi için NPC'nin farklı ifadeleri saklaması için bir dizi kullanır.
Keşifci'de, NPC ⟩ ProximityPrompt ⟩ ChatManager bölümüne gidin.
ChatManager'da, scriptte işaretlenen yerde, diyalog seçeneklerini saklamak için bir boş dizi oluşturun.
-- İstemci kullanıldığında sohbet diyalogunu döngüye alırlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Buraya dizi eklelocal dialogueArray = {}local function speak()local dialogue = "Söylemek istediğim bir şey var!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Yeni oluşturulan dizinin {} içindeki parantezlerde, virgüllerle ayrılmış en az üç diyalog dizesi yazın.
local dialogueArray = {"Merhaba!", "Seni tanıyor muyum?", "Güle güle!"}
Dizi indekslerini kullanma
Dizideki her değer bir indeks numarasına atanır. İndeksler, değerlerin saklandığı sıraya göre değerlere atanır. İlk değer indeks 1'de, ikinci değer indeks 2'de ve bu şekilde devam eder.
Java gibi bazı programlama dilleri, indeksleri 0'dan başlatır.
Yeni oluşturulan dizide, "Merhaba!" indeks 1'de ve "Güle güle!" indeks 3'te yer alır.
| İndeks | Değer |
|---|---|
| 1 | Merhaba! |
| 2 | Bugün harika bir gün! |
| 3 | Güle güle! |
Belirli indeks değerlerini kullanma
NPC'ye belirli diyalog parçalarını atamak için indeks değerlerini kullanın. Belirli bir indeksteki bir değeri kullanmak için, dizinin adının hemen arkasında köşeli parantez içinde indeksi ekleyin, örneğin dialogueArray[1].
dialogue değişkeninin varsayılan dize değerini indeks 2 ile değiştirin.
local dialogueArray = {"Merhaba!", "Seni tanıyor muyum?", "Güle güle!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endOyunu test edin ve NPC’ye tıklayın. İkinci dizi değeri sohbet balonunda görünmelidir. Her değeri test etmek için kodu değiştirmeyi deneyin.

Diyalog satırlarını değiştirme
Oyuncu NPC ile etkileşime geçtiğinde NPC her zaman aynı satırı söyleyecek. Bu sıkıcı. Bunun yerine, hangi indeks değerinin kullanılacağını güncellemek için bir değişken kullanın.
Bir oyuncu NPC ile etkileşime girdiğinde, değişkenin değerini 1 artırarak bir sonraki diyalog satırını gösterin.
Geçerli indeksi takip etmek için dialogueIndex adlı yeni bir değişken ekleyin. Değişkeni dizinin başlangıcında başlatmak için 1 olarak ayarlayın.
local dialogueArray = {"Merhaba!", "Seni tanıyor muyum?", "Güle güle!"}local dialogueIndex = 1speak() içinde, dialogueArray[2] olan indeksi, yeni oluşturduğunuz değişkenle değiştirin.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endFonksiyonun sonuna dialogueIndex değerine 1 ekleyin. speak() her çağrıldığında, diyalog bir sonraki dizeyi gösterecektir.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endOyunu test edin ve NPC'ye tıklayarak diziden her diyalog dizesini görün.
Script dizinin sonuna ulaştığında Çıktı penceresinde bir hata var.
Diyalog son cümlesini gösterdikten sonra baştan başlaması için bunu bir sonraki bölümde düzelteceksiniz.
Dizi boyutları
Dizinin boyutunu kullanarak, hedef indeksi 1'e sıfırlamanız gereken zamanı bilebilirsiniz. Bir dizinin boyutunu öğrenmek için, dizinin adının önüne boşluk bırakmadan # yazın.
Örneğin: #dialogueArray
Dizinin boyutunu, değişkenin mevcut değeriyle kontrol ederek yeniden başlama zamanını bilebilirsiniz.
Diyaloğu yeniden başlatma
Dizinin boyutunu kullanarak ilk diyalog parçasına geri dönmek için ne zaman döngüye alınacağını kontrol edin.
Bir if ifadesi ekleyin ve dialogueIndex'in #dialogueArray'a, bu dizinin toplam boyutuna eşit olup olmadığını kontrol edin. Eğer öyleyse, dialogueIndex'i 1 olarak ayarlayın.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endEğer dialogueIndex sona ulaşmadıysa, yine de dialogueIndex'e 1 eklemelidir. dialogueIndex += 1 ifadesini bir else ifadesinin altına alın.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endOynatın ve diyalogları döngüleyip yeniden başlatabiliyor musunuz kontrol edin.
Özet
Veri yapıları, veri kümelerinin nasıl saklandığıdır. Luau, veri yapıları oluşturmak için tablolar kullanır. Diziler, sıralı bilgi listelerini tutabilen bir tablo türüdür. Dizinin içindeki her bir değere, indeks numarası atanır ve bu indeks 1'den başlar.
Bu script, Bir Kullanılmayan Karakter (NPC) için olası diyalog satırlarının bir listesini oluşturmak için bir dizi kullandı.
Tamamlanmış script
-- İstemci kullanıldığında sohbet diyalogunu döngüye alır
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Buraya dizi ekle
local dialogueArray = {"Merhaba!", "Seni tanıyor muyum?", "Güle güle!"}
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ı
Eğer karakter diyalog dizisinden geçmiyorsa, aşağıdaki sorun giderme ipuçlarını deneyin.
- dialogueIndex'in 1'e geri ayarlandığı if ifadesini kontrol edin. Else ifadesinde, dialogueIndex'e 1 eklenip eklenmediğini kontrol edin.
- Dizinin boyutunu alırken, #dialogueArray ifadesindeki # işaretinin sonrasında boşluk olmadığından emin olun.
İsteğe bağlı zorluklar
Aşağıdaki isteğe bağlı zorluklardan birini deneyin.
- Scripti, NPC'nin diyaloglarının dizi boyunca geriye doğru gitmesi için kodlayın. Diyalog indeksi dizinin uzunluğunda başlamalı ve her seferinde çıkarmalıdır.
- NPC'nin her tıkladığında rastgele bir diyalog satırı göstermesini sağlayın. Aşağıda referans olarak kullanabileceğiniz bir örnek script 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