Veri yapıları, kodlayıcıların veri setlerini saklayıp düzenleme şeklidir. 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ı kapsamaktadır.

Tablolar
Tablolar, birden fazla değeri tutabilen veri türleridir. Tek bir değeri saklayan diğer veri türlerinin aksine, tablolar sabit bir boyuta sahip değildir ve farklı değer türlerinin karışımını tutabilir. Tablolarla, bir oyuncunun envanterinde eşyalar saklayabilir veya binlerce oyuncu adının listesini oluşturabilirsiniz.
Diziler
Farklı türde tablolar vardır. Bir türü, belirli bir sırada değer listelerini saklayan dizidir. Bir dizi oluşturmak için bir değişken oluşturun ve ona süslü parantezler { } atayın. Parantezler içindeki değerleri virgüllerle ayırın, aşağıdaki gibi:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Konuşan bir karakter oluşturun
Dizileri keşfetmek için, tıklandığında farklı bir diyalog satırı gösteren bir oynanamaz karakter (NPC) ile çalışacaksınız.
Bu proje, diyalog içermeyen, ancak kısmi bir script ve Prompt Detector içeren önceden yapılmış bir NPC modelini kullanacaktır.
Explorer'da, NPC'yi Workspace'e sağ tıklayıp Insert From File seçeneğini seçerek indirdiğiniz dosyayı içe aktarın.
Bir diyalog dizisi kodlayın
Bu adımlar, oyuncular NPC ile etkileşime geçtiğinde söylemesi için farklı ifadeleri saklamak üzere bir dizi kullanır.
Explorer'da NPC ⟩ ProximityPrompt ⟩ ChatManager'a gidin.
ChatManager'da, scriptte işaretli yerlerde, diyalog seçeneklerini saklamak için bir boş dizi oluşturun.
-- Prompt 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 ekleyinlocal dialogueArray = {}local function speak()local dialogue = "Söyleyecek bir şeyim var!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Yeni oluşturduğunuz dizinin {} parantezleri içinde, virgüllerle ayrılmış en az üç diyalog dizesi yazın.
local dialogueArray = {"Merhaba!", "Seni tanıyor muyum?", "Hoşça kal!"}
Dizi indekslerini kullanın
Dizideki her değere bir indeks numarası atanır. İndeksler, değerlerin saklandığı sıraya göre atanır. İlk değer indeks 1'de, ikinci değer indeks 2'de ve bu şekilde devam eder.
Bazı programlama dilleri, Java gibi, indeksleri 0'dan başlatır.
Yeni oluşturduğunuz dizide, "Merhaba!" indeks 1'de, ve "Hoşça kal!" indeks 3'te bulunmaktadır.
| İndeks | Değer |
|---|---|
| 1 | Merhaba! |
| 2 | Bugün harika bir gün! |
| 3 | Hoşça kal! |
Belirli indeks değerlerini kullanın
Belirli diyalog parçalarını NPC'ye atamak için indeks değerlerini kullanın. Belirli bir indeksteki değeri kullanmak için, dizinin adının hemen ardından 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?", "Hoşça kal!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endOyun testini yapın ve NPC'ye tıklayın. İkinci dizi değeri sohbet balonunda görünmelidir. Tablo içindeki her değeri test etmek için kodu değiştirmeyi deneyin.

Diyalog satırlarını değiştirin
Oyuncu NPC ile etkileşime geçtiğinde, NPC her zaman aynı satırı söyleyecektir. 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 geçtiğinde, bir sonraki diyalog satırını göstermek için değişken değerini 1 artırın.
Mevcut indeksi takip etmek için dialogueIndex adında yeni bir değişken ekleyin. Değişkeni dizinin başında başlatmak için 1 olarak ayarlayın.
local dialogueArray = {"Merhaba!", "Seni tanıyor muyum?", "Hoşça kal!"}local dialogueIndex = 1speak() içinde, dialogueArray[2]'deki indeks numarasını yeni oluşturduğunuz değişkenle değiştirin.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endFonksiyonun en altına, dialogueIndex'e 1 ekleyin. speak() bir sonraki çağrıldığında, diyalog bir sonraki dizeyi gösterecektir.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endOyun testini yapın ve NPC'ye tıklayarak diziden her diyalog dizesini görün.
Script dizinin sonuna ulaştığında, Output penceresinde bir hata olduğunu fark edin.
Bunu, son dizeyi gösterdikten sonra diyalogun baştan başlamasını sağlamak için bir sonraki bölümde düzelteceksiniz.
Dizi boyutları
Dizinin boyutunu kullanarak, istenen indeksi 1'e sıfırlamanız gerektiğini bilirsiniz. Bir dizinin boyutunu bulmak için, bir dizinin adının önüne # yazın, boşluk bırakmadan.
Örneğin: #dialogueArray
Dizinin boyutunu değişkenin mevcut değeriyle kontrol ederek, başa dönme zamanının gelip gelmediğini anlayabilirsiniz.
Diyaloğu yeniden başlat
Dizi boyutunu kullanarak, ilk diyalog parçasına geri dönme zamanının gelip gelmediğini kontrol edin.
Bir if ifadesi ekleyin ve dialogueIndex'in #dialogueArray'e, 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 sonuna ulaşmadıysa, yine de dialogueIndex'e 1 eklemelidir. dialogueIndex += 1 ifadesini bir else ifadesinin altına taşıyı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üye alıp yeniden başlatabildiğinizi doğrulayın.
Özet
Veri yapıları, veri setlerinin 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. Dizideki her değere bir indeks numarası atanır ve bu indeks 1'den başlar.
Bu script, Oynanamaz Karakter (NPC) için olası diyalog satırlarının bir listesini oluşturmak için bir dizi kullandı.
-- Prompt 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 ekleyin
local dialogueArray = {"Merhaba!", "Seni tanıyor muyum?", "Hoşça kal!"}
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 dizisinde geçiş yapmıyorsa, aşağıdaki sorun giderme ipuçlarını deneyin.
- dialogueIndex'in 1'e geri döndüğünden emin olun. Else ifadesinde, dialogueIndex'in kendisine 1 eklenip eklenmediğini kontrol edin.
- Dizinin boyutunu alırken, #dialogueArray'deki # işaretinden sonra boşluk olmadığından emin olun.
Opsiyonel zorluklar
Aşağıdaki opsiyonel zorluklardan birini deneyin.
- Scripti, NPC'nin diyalogunun dizide geriye doğru gitmesi için kodlayın. Diyalog indeksi dizinin uzunluğunda başlamalı ve her seferinde çıkarmalıdır.
- Diyalogları sırayla göstermek yerine, NPC'nin her seferinde rastgele bir diyalog satırı göstermesini sağlayın. Referans olarak aşağıda bir örnek script verilmiştir.
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