iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
自我挑戰組

透過Roblox Studio學習Lua語言與基本程式邏輯系列 第 16

Day 16: 為什麼要WaitForChild跟FindFirstChild?

  • 分享至 

  • xImage
  •  

在昨天,我們在定義RemoteEvent的位置的時候,我們使用了一個名為GetService的函式擷取RemoteEvent在ReplicatedStorage中的位置,那看到這你一定會好奇,為什麼不直接用 . 就好了,一定要用GetService嗎?

而在昨天我也只有用簡單的一句話帶過這項疑問,避免程式運行過快導致來不及擷取,但其實這背後的邏輯並不是只有這一句話這麼簡單


1. 等待物件

通常在製作腳本時,我們會需要定義很多的變數,而其中,路徑這項資料型態在腳本中又佔了一大宗,而我們在定義某項物件的路徑的時候,時常會出現像以下的錯誤
https://ithelp.ithome.com.tw/upload/images/20250827/20169664RFNwVp4iy9.png

這項錯誤是在系統無法找到你所定義的路徑內的物件時才會觸發,雖然可能真的是你寫錯了路徑,但更多的時候,你定義的路徑其實是正確的,但系統卻找不到,這又是為什麼呢?

問題就是出在速度,有的時候你的腳本會比你要定義的物件先載入好,而此時腳本在執行定義時就會因為找不到物件而報錯,此時如果能夠讓腳本持續等待直到找到這個物件就會是個不錯的解決方法。

當然如果我們在每一個定義前面都放上這樣一個邏輯的函式會非常複雜且臃腫,所以Luau已經幫我們在語言庫裡預先定義好了這項函式,也就是WaitForChild

WaitForChild

這項函式的使用方法為

local Part = workspace:WaitForChild("Part")

它的作用等同於

local Part = workspace.Part

但也就是多了這一個等待,讓這個腳本的報錯率降低,另外你也可以在函式的第二個參數輸入一項數字,這個數字代表的是要讓這項函式等待這個物件等多久,如果一直沒有等到才會報錯

local Part = workspace:WaitForChild("Part, 5")

GetService

這項函式同理,不過他適用的對象為服務,畢竟也是會有客戶端比伺服器端先載入好的情況


2. 尋找物件

接下來這部分會跟前幾天說過的if判斷式相關,漏看的麻煩回去複習。

當我們使用if來尋找某項物件時,我們除了直接判斷名稱是否相同,此物件使否等於此物件等這種方式,我們還可以以是否等於某項物件型態來判斷。

那首先我們要瞭解何謂物件型態,物件型態指的就是這項物件的Class,Class就是這個物件的類型,舉例來說,我們在平常測試時會新增的Part、將外部3D物件匯入後的MeshPart、可以讓玩家最為梯子攀爬的TrussPart等物件,他們的ClassName都叫做BasePart,知道了這項概念後,我們就可以用一項名為IsA的函式判斷物件的物件型態為何。

舉個例子,假設現在我們使用一個for迴圈取得workspace裡的所有物件

for index, value in pairs(workspace:GetChildren()) do
    
end

接下來我們要輸出所有ClassName為BasePart的物件

for index, value in pairs(workspace:GetChildren()) do
    if value:IsA("BasePart") then
        print(value)
    end
end

而我們在尋找某一項特定物件時,也不一定要直接用等式來尋找

舉例就像

if workspace.Part == true then
    print("I found the Part!")
end

而我們也可以使用一項叫做FindFirstChild的函式來尋找

if workspace:FindFirstChild("Part") then
    print("I found the Part by using FindFirstChild!")
end

這項函式的作用在於,如果我們要尋找的對象的名稱與其他物件重複,他將會把結果導向他先找到的那項物件,通常我們在做關於物件判斷時很常使用到這項函式。


學會了這些函式可以大幅減少你在寫程式時的錯誤,因為說真的有些錯誤不是你的錯~


上一篇
Day 15: 伺服器端、客戶端與RemoteEvent、RemoteFunction
下一篇
Day 17: Script、LocalScript、ModuleScript
系列文
透過Roblox Studio學習Lua語言與基本程式邏輯21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言