介紹陣列

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

資料結構 是儲存和組織整個資料集的方式。在 Lua 中,資料結構是用表創建和組織的。 桌子 可以容納任何數量的值。

此文件涵蓋使用 陣列 ,一種特定的表輸入,來創建一個說話的角色。

桌子

桌子 是資料類型,可以存儲多個值。與其他資料類型不同,桌子沒有固定大小,可以容納一個混合的價值類型。有了桌子,你就可以在玩家的道具欄中儲存項目,或者創建一個數千個玩家名稱的列表。

陣列

有各種類型的表。其中一種是 陣列 ,用於在特定順序中存儲值的列表。若要建立陣列,請在變量中創建一個並將其設定為下列所示: { } 。在陣列中,用於分開值的前後方有下列示例:

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

創建一個話語角色

要探索陣列,您將與一名非玩家角色 (NPC) 合作,當單擊時會顯示一個不同的對話框。

此項目將使用預製的 NPC 模型,其包括一個部分指令碼和提示偵測器,但缺乏對話。

  1. 下載 NPC 樣板。

  2. 在 Explorer 中,右鍵單擊 工作區 > 從檔案中插入 並選擇下載的檔案。

編寫對話框陣列

這些步驟使用陣列儲存不同的文字,以便 NPC 可以和玩家交互時說出。

  1. Explorer 中,去 NPC > ProximityPrompt > ChatManager。

  2. 在 ChatManager 中,在指定的 空白表 中創建一個 空白表 來儲存對話選項。


    -- 使用對話框時圍繞聊天時話題
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- 在此添加陣列
    local dialogueArray = {}
    local function speak()
    local dialogue = "I've got one thing to say!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. 在剛創建的矩陣中,內部的 {} 之前,輸入至少三個和話。


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

使用陣列索引

每個值在陣列中都有一個 index 數字。索引是由存存值的順序來指定索引。第一值是在索引 1 中指定,第二值是在索引 2 中指定,等等。

一些程式語言,例如 Java,會在 0 開始索引。

在剛創建的陣列中,"Hi" 在索引 1 ,"Goodbye!" 在索引 3 。

索引價值
1
2今天是個很棒的一天!
3再見!

使用特定指數值

使用索引值將特定對話分配給 NPC。要在特定索引上使用值,請在陣列名稱後直接加入索引,例如 dialogueArray[1]

  1. dialogue 變數的預設值串值替換為索引 2。


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. 測試並點擊 NPC。 第二個陣列值應該會出現在聊天泡泡中。 嘗試將代碼變更,以測試每個值在表中的值。

變更對話線

當玩家與 NPC 互動時,NPC 總是會說相同的話。這很無聊。使用變數更新哪個索引值使用。

每次玩家與 NPC 互動時,將變數值增加 1 來顯示下一個對話框。

  1. 要跟蹤目前的索引,請新增一個名為 dialogueIndex 的變數。將變數設為 1 來在陣列的開始位置執行。


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. speak() 中,將索引號在 dialogueArray[2]] 中的位置變更為您剛創建的變量。


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. 在功能的底部,將 1 加到 dialogueIndex。下次 speak() 時,對話框會顯示下一個字串。


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. 播放測試並點擊 NPC 以從陣列中查看每個對話字串。

注意,腳本到達陣列結束後會發生 錯誤 在輸出視窗。

您將在下一節中修復這個問題,以便對話框從最後一個字串開始重新啟動。

陣列尺寸

您可以使用陣列的大小來知道陣列想要的索引是否為 1 時重設所需的索引。找到陣列的大小 size ,在陣列的名稱前,無論是空格。

例如:#dialogueArray

與變量的當前值對陣的大小進行測試,以確定開始時是否需要從頭開始。

正在重新啟動對話框

使用陣列尺寸來檢查時間是否到達回到第一個對話框的時間。

  1. 添加 if 語句,並檢查 dialogueIndex#dialogueArray 總大小。如果是,請將 dialogueIndex 設置為 1。


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. 如果 dialogueIndex 不在最結束,它還是應該添加 1 到 dialogueIndex 。在另一個句子下移動 dialogueIndex += 1


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    else
    dialogueIndex += 1
    end
    end
  3. 播放並確認您可以繼續撥動對話框並重新啟動對話框。

摘要

資料結構是儲存資料集的方式。 Lua 使用表來創建資料結構。 陣列是一種類型的表,可以存儲排序的資料列表。 每個值範圍內的資料都有一個索引數,從索引 1 開始。

此腳本使用陣列建立一個可能對話的對話線清單,以對非玩家角色 (NPC) 建立。

已完成的指令碼

-- 使用對話框時圍繞聊天時話題
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- 在此添加陣列
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)

排障提示

如果角色沒有通過對話框陣列,請嘗試以下的疑難排解提示。

  • 在 else 條碼中,檢查 dialogueIndex 是否設為 1。在其他條碼中,檢查 dialogueIndex 是否添加了 1 個。
  • 獲取陣列的大小時,請確認陣列中的空格後有沒有 # 在 #dialogueArray 中。

可選挑戰

請試一個下列可選的挑戰。

  • 將指令碼編寫成指令碼,以便 NPC 的對話從陣列中倒轉。對話框索引應該從陣列開始,而不是從每個添加。
  • 而不是顯示對話框的順序,NPC 每次使用 Random.new() 來顯示隨機對話框。 一個示例指令碼已包含在下面。

local randomGenerator = Random.new()
-- 每次點擊 NPC 時顯示新對話框
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end