之前在講資料型態的時候,我們有提過在腳本中定義變數要用local這個指令,但如果我們想要定義一個其他腳本也可以存取的變數呢? 你可能會想到可以用ModuleScript,可是如果我只要定義一個變數,而不是完整的字典呢?
這時,你就可以使用一項變數物件來定義變數,這種變數會以物件的方式呈現,所以只要把它放在像是ReplicatedStorage這類不論伺服器端或客戶端都可以存取的服務裡,就可以讓所有的腳本存取它。
更好的是,你可以不需要打開腳本就改變變數值,這對於某些功能非常實用
而關於物件的新增我就不贅述,我們直接來看有幾種變數物件可以新增
在新增物件的選項裡面搜尋變數就可以找到所有的結果
這些變數類型大家應該很熟悉了,我們在先前的單元都有提過。
這項事件會在物件的某項屬性值改變時觸發,以上述的外部變數舉例就是變數值改變。
我們來做個小練習,首先先新增腳本在任意一處服務,然後在ReplicatedStorage新增變數物件,並且透過剛才新增的腳本來改變變數值。
舉例: 將Script放在Workspace裡面,然後新增一項numbervalue
local number = game:GetService("ReplicatedStorage"):WaitForChild("NumberValue")
local ChangedValue = 5
number.value = ChangedValue
接著連接事件與函式
local number = game:GetService("ReplicatedStorage"):WaitForChild("NumberValue")
local ChangedValue = 5
number.value = ChangedValue
number.Changed:Connect(function(Property)
print("屬性"..Property.."改變為"..ChangedValue)
end)
這項事件會回傳一個參數,為被改變的屬性值。
因為我們可以存取被改變的屬性值,我們自然可以過濾我們想要的屬性值,假設這項物件有多種屬性 (例如顏色、大小、位置等),那在每一個屬性被改變的時候都會觸發這個函式,而我們只要過濾掉不要的屬性,在指定屬性被觸發後才執行指令。
開學了😭