Matrislere Genel Bakış

*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 tüm veri setlerini depolama ve düzenleme yöntemidir. Lua'da, veri yapıları tablolar ile oluşturulur. Tablolar herhangi bir değerin bir sayısını tutabilir.

Bu makale, konuşan bir karakter oluşturmak için matrisleri kullanır, özel bir tablo yaz.

Tablolar

Masalar tek bir değer depolayan diğer veri türlerinden farklı veri türleridir. Masaların tek bir değer depolamadığını unutmayın; masalar bir dizi farklı değer türlerini depolayabilir. Masalar ile, oyuncunun envanterindeki eşyaları depolayabilir veya binlerce oyuncu ismi içeren bir liste oluşturabilirsiniz.

Matrisler

Farklı türdeki tablolar vardır. Bir türü bir matris dir, bu değerlerin belirli bir sırayla listelerini saklar. Bir matris oluşturmak için bir değeri oluşturun ve komutlarla aşağıdaki gibi ayarlayın:

local myArray = {"item1", "item2", 10, workspace.Part, myVariable}

Bir Konuşan Karakter Oluşturulması

Matrisleri keşfetmek için, tıklandığında farklı bir diyalog satırı gösteren oynanabilir olmayan bir karakterle çalışacaksınız.

Bu proje, bir kısım kodu ve Diyalog Algılayıcı'yı içeren önceden yapılmış bir NPC modelini kullanacak, ancak diyalog eksik.

  1. Şablon NPC'yi indirin.

  2. In Explorer, NPC'yi Çalışma Alanına sağ tıklayarak ınport etmeyi > dosyadan ınport etmeyi ve indirilen dosyayı seçerek ınport etmeyi seçin.

Bir Diyalog Matrisi Oluşturulması

Bu adımlar, oyuncuların etkileşimleri sırasında NPC'nin söylemesi gereken farklı cümleleri depolar bir matris toplar.

  1. In the Explorer , go to NPC > YakınlıkPrompt > ChatManager.

  2. ChatManager, skriptte belirlenen yerde, diyalog seçeneklerini depolamak için bir boş ayar oluşturun.


    -- Kullanıcının isteği kullanıldığında sohbet diyalogları aracılığıyla döngü
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- Buraya bir matris ekleyin
    local dialogueArray = {}
    local function speak()
    local dialogue = "I've got one thing to say!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. Yeni oluşturulan matrisinin içindeki boşlukların arasında en az üç düzgünlük ayıklayıcı yazın.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}

Matrix İndeksi Kullanımı

Matrisindeki her değere bir index numarası atanır. Matrisler, değerlerin saklandığı sırayla atanır. İlk değer, indeks 1'dir ve ikinci değer, indeks 2'dir gibi.

Bazı kodlama dilleri, wiele gibi, başlangıç ​​sayılarını 0 ile başlatır.

Yeni oluşturulan matrisinde, "Hi" 1. indekste ve "Goodbye!" 3.indekste bulunur.

DizinDeğer
1Merhaba
2Bugün harika bir gün!
3Güle güle!

Belirli İndeks Değerlerini Kullanma

NPC'ye belirli bir diyalog parçasını atamak için indeks değerlerini kullanın. Özel bir indeksteki bir değeri kullanmak için, aranın adını takiben doğrudan bir boşluk ekleyin, örneğin dialogueArray[1].

  1. dialogue değişkeninin varsayılan değeri ile 2 indeks değerini değiştirin.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. NPC'yi oynat ve tıkla. İkinci arayan değeri sohbet balonuna görünmelidir. Kodu tablodaki her değeri test etmek için değiştirmeyi dene.

Dialog Görüntülerini Değiştirme

Oyuncu NPC ile etkileşim kurduğunda, NPC her zaman aynı satırı söyleyecektir. Bu sıkıcı. Bunun yerine, değiştirken kullanılacak kayıt değerini güncellemeniz gerekir.

Bir oyuncu NPC ile etkileşim kurduğunda, şu diyalog satırını göstermek için 1 değer artırın.

  1. Mevcut indeksi takip etmek için, dialogueIndex adında yeni bir değişken ekleyin. Değişkeni matrisin başlangıcında 1 olarak ayarlayın.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. In speak() , değiştir dialogueArray[2] ile oluşturduğunuz 변abili ile indeks numarasını yeniden oluşturun.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. İşlevin altında, 1'i dialogueIndex 'e ekleyin. Bir sonraki çağrıda speak() ise, diyalog kutusu bir sonraki dizigösterir.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. NPC'yi oynat ve arkadaşını görüntülemek için arkadaşını tıkla.

Script'in arayüzünün sonuna ulaştığında bir hata olduğunu göz önünde bulundurun.

Sonraki bölümde bu hataları düzeltirsiniz, böylece diyalog sonra gelen son yazıdan itibaren başlar.

Matris Boyutları

İstek dizinin 1'e sıfırlanacağını bilmek için arayanın boyutunu kullanabilirsiniz. Bir arayanın boyutunu bulmak için # yazın, boşluklar dışında, bir arayanın isminin arkasında.

Örneğin: #dialogueArray

Matrisin boyutunu değişkenin mevcut değerine karşı kontrol ederek başlangıçta geri dönmeye hazır olduğunuzu bilin.

Dialog'u Yeniden Başlatılıyor

Döngüyü ilk diyalog parçasına geri dönme zamanını kontrol etmek için matris boyutunu kullanın.

  1. Bir ifade ekleyin ve dialogueIndex``#dialogueArray ile eşit olup olmadığını kontrol edin. Bu arayabın toplam boyutunu ayarlayın. Eğer öyleyse, dialogueIndex 1'e 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 bitirdeğilse, hala 1 eklemelidir dialogueIndex . Diğer bir ifadenin altında dialogueIndex += 1 hareket edin.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    else
    dialogueIndex += 1
    end
    end
  3. Oyunu oynayıp diyalogu yeniden başlatabilirsiniz.

Özet

Veri yapıları, verilerin saklanması için bir dizi olarak depolandığıdır. Lua, veri yapıları oluşturmak için tabloları kullanır. Matrisler, dizi listeleri için sıralama gibi bir tür tabloyu içerir. Her değer matrisin içinde, matrisin 1. inde başlayan bir indeks numarası atanır.

Bu senaryo, bir NPC için oynanabilir olmayan karakter için olası diyalog satırları oluşturmak için bir matris kullandı.

Komplete edilen kript

-- Kullanıcının isteği kullanıldığında sohbet diyalogları aracılığıyla döngü
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Buraya bir matris ekleyin
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)

Hata ayıklama ipuçları

Karakter diyalog aracından geçmiyorsa, aşağıdaki sorun giderme ipuçlarını deneyin.

  • dialogueIndex ile ifade edilen ifadeyi 1'e geri yazdığınızı kontrol edin. Diğer ifadenin dialogueIndex kısmında, 1'e kendisi eklediğini kontrol edin.
  • Matrisin boyutunu alırken, #'in #dialogueArray arkasında boşluk olup olmadığından emin olun.

Opcional Görevler

Aşağıdaki zorluklardan birini deneyin.

  • NPC'nin diyalogunu arayüzden geri çevirmek için kodu kullanın. DiyalogIndex, arayüzden başlayıp her sefer eklemek yerine azaltır.
  • Sırayla diyalog göstermek yerine, NPC'nin her seferinde Random.new() kullanarak rastgele bir diyalog satırı göstermesini sağlayın. Aşağıdaki bir örnek senaryo aşağına dahil edilmiştir.

local randomGenerator = Random.new()
-- NPC'nin tıklanıldığında yeni bir diyalog gösterir
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end