Dizilere Giriş

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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.

  1. Şablon NPC'yi indirin.

  2. 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.

  1. Explorer'da NPCProximityPromptChatManager'a gidin.

  2. 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ı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 = {}
    local function speak()
    local dialogue = "Söyleyecek bir şeyim var!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. 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.

İndeksDeğer
1Merhaba!
2Bugün harika bir gün!
3Hoşç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].

  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)
    end
  2. Oyun 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.

  1. 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 = 1
  2. speak() 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)
    end
  3. Fonksiyonun 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 += 1
    end
  4. Oyun 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.

  1. 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 then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. Eğ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 + 1
    end
  3. Oynatı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ı.

Tamamlanmış script
-- 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
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.