Instance

顯示已棄用項目

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

無法建立
無法瀏覽

案例是 Roblox 類別樹的基本類別,可以是資料模型樹的一個分支。 不能直接創建案例對象。

Datatype.Instance.new() 是一種特殊的函數,可以用於在代碼中創建對象。此函數以類別為參數,並返回創建的對物件。抽象類和服務無法使用 Class.Instance.new() 函數。

概要

屬性

  • 平行讀取

    決定 Instance 和它的後代可以使用 Instance:Clone() 來複製,並可以儲存/發佈。

  • Capabilities:SecurityCapabilities
    Roblox 指令碼安全性
    平行讀取

    允許在此容器內使用的技能組。

  • 平行讀取

    Class.Instance 的非獨一標識。

  • 未複製
    平行讀取

    決定 Instance 的階級級別。

  • 隱藏
    外掛程式安全性
    平行讀取
    已棄用

    一個已過時的屬性,用於保護 CoreGui 對象。

  • 未複製
    Roblox 指令碼安全性
    平行讀取

    將實例變更為沙盒容器。

  • UniqueId:UniqueId
    未複製
    無法建立指令碼
    Roblox 安全性
    平行讀取

方法

活動

屬性

Archivable

平行讀取

此屬性決定要在發布或儲存體驗時是否包含在體驗中,或是在 Clone() 上呼叫一個體個體、實例的祖先時。直接在 Clone() 上呼叫時將返回 1>nil1>

使用 DuplicateCopy / Paste 選項來複製對象,會忽略其自己的 1> Class.Instance.Archivable|Archivable1> 屬性和設定 4> Class.Instance.Archivable|Archivable4> 為 7> true7> 對複製對象。


local part = Instance.new("Part")
print(part:Clone()) --> Part
part.Archivable = false
print(part:Clone()) --> nil

Capabilities

SecurityCapabilities
Roblox 指令碼安全性
平行讀取

允許對此個體、實例內的指令使用的能力套裝。要啟用能力,Instance.Sandboxed 屬性必須啟用。

此屬性由實驗性功能使用。 請參閱 脚本功能 頁面獲取更多詳情。

Name

平行讀取

Class.Instance 的非獨一標識。

此屬性是描述對物件的標識。名稱不是獨一無二的標識,但多個對象的兒女可以分享相同的名稱。名稱是用於組織對象階級的,並允許讓腳本存取特定對象。實例的名稱不能超過 100 個字符。

對象的名稱通常會用於使用以下方法來存取對象:


local baseplate = workspace.Baseplate
local baseplate = workspace["Baseplate"]
local baseplate = workspace:FindFirstChild("BasePlate")

為了使用 dot 運算器來將對象可用,對物件的 Name 必須遵守特定語法。 對象的名稱必須從下抬頭字或字母開始。 剩餘的名稱只能包含字母、數字或下抬頭字(不能包含其他特殊字符)。 如果對象名稱不遵守此語法,它將無法使用 dot 運算器並且 Lua 將無法解釋此名稱作為標識。

如果有多個對象具有相同的名稱,則任何與此名稱索引任何一個對象的嘗試將返回找到該名稱的唯一對象,但不總是所需的對物件。如果特定對象需要通過代碼存取,則建議給它一個獨特的名稱,或確保其任何一個子對象都不與此名稱相同。如果需要通過代碼存取的對象,則建議給它一個

注意,顯示實個體、實例階級的完整名稱可以使用 Instance:GetFullName()

Parent

未複製
平行讀取

Class.Instance 的父親 是 Class.Instance 的階級父親。以下是常用的術語,當談論這個屬性如何設設定:

  • 對象是一個 子對象 ( 父對象設為該對象) 另一個對象,當其父對象設為該對物件。
  • Class.Instance 的子孫是該對物件的子孫,還有子孫的子孫。
  • Class.Instance 的祖先是 Instance 的所有物件。

這個屬性是其他許多 API 成員的名稱,例如 GetChildrenFindFirstChild

Class.Instance:Remove()|Remove 函數將此屬性設置為空。 呼叫 Destroy 將暫時父親的所有子兒設置為 Instance ,並且將所有子兒的上一個父親設置為 1>Parent1> ,並且將所有子兒的上一

此屬性也是用於管理對象是否存在在遊戲中或需要移除。 要是對象的父級在 DataModel 中,或是在變數中,或是繼承了其他對象的父元素性,就會存在在遊戲中

使用 Instance.new() 創建的新對象將不會有任何父元素,通常不會顯示或功能直到有人設設定。對象的初始化過程有兩個步驟:創建對物件,然後設置其父元素。


-- Create a part and parent it to the workspace
local part = Instance.new("Part")
part.Parent = workspace
-- Instance new can also take Parent as a second parameter
Instance.new("NumberValue", workspace)

當在 DataModel 中將某些屬性變更時,引用到此時 Class.DataModel 的引用子 Class.DataModel 可能需要執行額外的內部工作 (例如複製、渲染和GUI レイアウト)。 隨時,將引用個體、實例的屬性 1>Class.DataModel1> 前,而不是後,設為將其父 4>Class.Data

對象複製

服務器創建的對象將不會在複製到客戶端之前複製到某個對象,直到它成為某個被複製的對象的父級。當創建對象時,設置許多屬性,建議設置 最後一個父級 。這會確保對象在複製多個屬性變更後重複一次。


local part = Instance.new("Part") -- 避免在這裡使用第二個參數
part.Anchored = true
part.BrickColor = BrickColor.new("Really red")
-- 可能有很多其他屬性變更可以在這裡...
-- 永遠設定最後一個親!
part.Parent = workspace

如果您將您的零件親繫到 Model 的親級還沒有設置,那麼將每個零件親繫到那個模型是沒有問題的,因為模型尚未重複。

RobloxLocked

隱藏
外掛程式安全性
平行讀取

這個屬性曾用來保護 CoreGui 服務中的對象免於被用戶以非授權方式變更。它已被淘汰,並且做什麼也沒有。

Sandboxed

未複製
Roblox 指令碼安全性
平行讀取

將實例變成沙盒容器。沙盒容器是一種實驗性功能,可以限制內容器中的腳本執行的行動。

參閱 指令碼功能 頁面獲取更多資訊。

UniqueId

UniqueId
未複製
無法建立指令碼
Roblox 安全性
平行讀取

方法

AddTag

void

此方法將標籤應用到實個體、實例,沒有效果如果標籤已經應用。成功添加標籤會發生由 CollectionService:GetInstanceAddedSignal() 用指定的標籤創建的信號。

注意,標記實個體、實例時,常常有一些資源被用來提供標籤的功能,例如事件連接或桌子。為了防止記憶體泄露,建議清理這些資源 (連接到信號的返回,設為 nil

參數

tag: string

返回

void

ClearAllChildren

void

此功能毀滅所有實個體、實例的子兒。

作為 Instance:Destroy() 也會在對象上的子兒上呼叫,此功能將摧毀所有子兒。

清除所有兒童的替代方案

如果開發人員不希望摧毀所有子孫,他們應該使用 Instance:GetChildren()Instance:GetDescendants() 來在對象中循環,選擇要摧毀的部分。例如,下列代碼示例將摧毀所有部物件。


for _, instance in object:GetDescendants() do
if instance:IsA("BasePart") then
instance:Destroy()
end
end

返回

void

範例程式碼

Instance:ClearAllChildren

local part = Instance.new("Part")
-- add some sparkles
for _ = 1, 3 do
local sparkles = Instance.new("Sparkles")
sparkles.Parent = part
end
print("Part has", #part:GetChildren(), "children")
--> Part has 3 children
part:ClearAllChildren()
print("Part has", #part:GetChildren(), "children")
--> Part has 0 children

複製 會創建一個複製的實例和所有其子,無視所有不是 Archivable 的實例。 複製根實例由此方法返回,其

如果在複製的實個體、實例中設定了一個參考屬性,如果 ObjectValue.Value,複製的值取決於原始值:

  • 如果參考屬性指向複製的實例,複製本會指向複製本。
  • 如果參考屬性指向 複製的對象,相同的值會在複製中保持。

返回

範例程式碼

Cloning an Instance

local Workspace = game:GetService("Workspace")
-- Get a reference to an existing object
local model = script.Parent.Model
-- Create a clone of the model
local clone = model:Clone()
-- Move the clone so it's not overlapping the original model
clone:PivotTo(model.PrimaryPart.CFrame - (Vector3.xAxis * 10))
-- Add the clone to the Workspace
clone.Parent = Workspace

Destroy

void

Instance.Parent 屬性設置為空,鎖定 Instance.Parent 屬性,切斷所有連接,並且在所有兒童上呼叫摧毀。 此功能是擺脫不再需要的對象的正確方式。 擺脫不必要的對象是

提示: 在對物件上呼叫摧毀之後,將對象 (或其子代) 的任何變數設為零。這樣可以防止您的代碼在對物件上做任何事。


local part = Instance.new("Part")
part.Name = "Hello, world"
part:Destroy()
-- 不要這麼做:
print(part.Name) --> "世界你好"
-- 這樣做可以防止上述行的運行:
part = nil

一旦 Instance 被此方法摧毀,它就無法重用,因為 Instance.Parent 屬性已鎖定。為了暫時移除對物件,將 Parent 設置為零。例如:


object.Parent = nil
wait(2)
object.Parent = workspace

要在一個特定時間後摧毀對象,請使用 Debris:AddItem()


返回

void

範例程式碼

Instance:Destroy()

local part = script.Parent.Part
part:Destroy()

FindFirstAncestor

平行寫入

返回第一個祖先的 Instance ,其 Instance.Name 與指定的名稱相等。

此功能在 Instance.Parent 即可開始,並且在 DataModel 中工作。如果沒有相符的祖先,它將返回零。

下面的代碼示例將尋找名為「Car」的對象的第一個祖先。


local car = object:FindFirstAncestor("Car")

對於這個函數的變體,如果找到特定類別的祖先,請參閱 Instance:FindFirstAncestorOfClass()Instance:FindFirstAncestorWhichIsA()

參數

name: string

要尋找的 Instance.Name


返回

FindFirstAncestorOfClass

平行寫入

返回第一個祖先的 Instance ,其 Object.ClassName 與指定的樣式相等。

此功能在 Instance.Parent 即可開始,並且在 DataModel 中工作。如果沒有相符的祖先,它將返回零。

此功能的常見使用是尋找 ModelBasePart 屬性。例如:


local model = part:FindFirstAncestorOfClass("Model")

此功能是 Instance:FindFirstAncestor() 的變體,檢查 Object.ClassName 屬性而不是 Instance.Name 。 1> Class.Instance:FindFirstAncestorWhichIsA()1> 也存在,使用 4> Class.Object:IsA()

參數

className: string

要尋找的 Object.ClassName


返回

FindFirstAncestorWhichIsA

平行寫入

返回 Instance 的第一個祖先,其中 Object:IsA() 對指定的名稱返回為真。

此功能在 Instance.Parent 即可開始,並且在 DataModel 中工作。如果沒有相符的祖先,它將返回零。

Instance:FindFirstAncestorOfClass() 不同,此功能使用 Object:IsA(),這是尊重類別継承的。例如:


print(part:IsA("Part")) --> true
print(part:IsA("BasePart")) --> true
print(part:IsA("Instance")) --> true

因此,下列代碼示例將返回第一個 BasePart 祖先,無論是 WedgePartMeshPart 或 2>Class.Part2> 。


local part = object:FindFirstAncestorWhichIsA("BasePart")

也參閱, Instance:FindFirstAncestor()

參數

className: string

要尋找的 Object.ClassName


返回

FindFirstChild

平行寫入

返回 Instance 中的第一個子,以指定的名稱,

nil 如果此子沒有存在。如果可選的 recursive 參數是真的,此函數會搜尋所有子孫,而不是只有 Instance 的直接子孫。

檢查對象的存在

如果您需要確認對象存在,請使用 findFirstChild。嘗試使用 dot 運算器索引一個子兒,如果子兒不存在,將發生錯誤。


-- 如果零件不存在在工作區,以下行列錯誤:
workspace.Part.Transparency = 0.5

使用 FindFirstChild 檢查零件,然後使用 if 語句執行需要它的代碼。


local part = workspace:FindFirstChild("Part")
if part then
part.Transparency = 0.5
end

尋找屬性與子兒的子代

當對象的 Name 與其 Parent 的屬性相同時,當使用 dot 運算器時,屬性會優先於子兒上。當使用 dot 運算器時,屬性會優先於子兒上。

在下面的例子中, Folder 稱為 "顏色" 是添加到 Part ,這也有 Part.Color 屬性。 2> Class.Part.Color2> 指向 Folder 的 5> Datatype.Color35> ,而不是 8> Class.Part8> 。


local part = Instance.new("Part")
local folder = Instance.new("Folder")
folder.Name = "Color"
folder.Parent = part
local c = part.Color --> 顏色 3
local c2 = part:FindFirstChild("Color") --> The Folder

使用 FindFirstChild() 這邊的好處是,新增屬性不會對您的代碼造成風險。

性能筆記

FindFirstChild() 需要比使用 dot 運算器多 20% 長,以及比儲存引用對物件的資

參數

name: string

要搜尋的 Instance.Name

recursive: bool

是否要執行搜尋或不要執行搜尋。

預設值:false

返回

範例程式碼

Instance:FindFirstChild

local found = workspace:FindFirstChild("Brick")
if found then
found.Name = "Foo"
end

FindFirstChildOfClass

平行寫入

返回 Instance 的第一個子,其 ClassName 與指定的 classe 一致。

如果找不到符合的兒童,此功能將返回 nil。

Instance:FindFirstChildWhichIsA() 不同,此函數只會返回與指定的 classe 一致的對象,無視遺產級別。

如果開發者正在尋找名字為 Instance:FindFirstChild() 的兒童,應該使用 Class.Instance:FindFirstChild 代替。

參數

className: string

要尋找的 Object.ClassName


返回

範例程式碼

Instance:FindFirstChildOfClass

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid
while not humanoid do
humanoid = character:FindFirstChildOfClass("Humanoid")
if not humanoid then
character.ChildAdded:Wait()
end
end

FindFirstChildWhichIsA

平行寫入

返回 Instance 中的第一個子 Object:IsA() 為指定的子 Class.Instance 的返回。

如果找不到符合的兒童,此功能將返回 nil。如果選項的重複參數是真的,此功能將搜索所有後代,而不是只有 Instance 的即時兒童。

Instance:FindFirstChildOfClass() 不同,此功能使用 Object:IsA(),這是尊重類別継承的。例如:


print(part:IsA("Part")) --> 是
print(part:IsA("BasePart")) --> 是
print(part:IsA("Instance")) --> true

因此,下列代碼示例將返回第一個 BasePart 兒,無論是 WedgePartMeshPart 或 2>Class.Part2> 。


local part = object:FindFirstChildWhichIsA("BasePart")

開發人員正在尋找名稱為 Instance:FindFirstChild() 的兒童時,應該使用 Class.Instance:FindFirstChild 代替。

參數

className: string

要搜尋的 Object.ClassName

recursive: bool

是否要執行搜尋或不要執行搜尋。

預設值:false

返回

FindFirstDescendant

平行寫入

返回找到的第一個子孫,使用 Instance.Name

此方法已停用,並且不能使用。要找到實個體、實例的第一個子孫,請考慮使用 recursive 參數在 Instance:FindFirstChild() 上。

參數

name: string

Class.Instance.Name 可搜尋。


返回

GetActor

平行寫入

如果 InstanceActor 的子,Actor 本身將返回。否則,其最近的祖先 2>Class.Actor2> 將返回。如果沒有祖先是 5>Class.Actor5> ,結果將是 8>nil8> 。


返回

找到了 Actor

GetAttribute

Variant
平行寫入

此方法返回指定的屬性名稱。如果沒有指定屬性,nil 將返回。

舉例來說,下列代碼碼碼設置,然後取得 InitialPosition 特性值:


local part = workspace.Part
part:SetAttribute("InitialPosition", part.Position)
local initialPosition = instance:GetAttribute("InitialPosition")
print(initialPosition)

也看看

參數

attribute: string

正在擷取的屬性名稱。


返回

Variant

指定的屬性名稱的值。如果沒有屬性被指定,nil 將返回。

GetAttributeChangedSignal

此功能返回一個與 Changed 事件相同的事件,除了它只會在指定的屬性變更時僅發生外;它與 GetPropertyChangedSignal() 對象相似,但對於屬性。

一般來說,使用此方法而不是使用連接到 Changed 與具有此屬性名稱的函數來檢查屬性名稱是一個好主意。後續對此方法在同一個對象上使用此方法並且使用相同的屬性名稱會返回相同的事件。

下列代碼範例返回一個信號,發射 attributeChanged() 函數,當零件的 初始位置 屬性變更時:


local part = workspace.Part
part:SetAttribute("InitialPosition", part.Position)
local function attributeChanged()
print("Attribute changed")
end
part:GetAttributeChangedSignal("InitialPosition"):Connect(attributeChanged)

也參閱 Instance.AttributeChanged ,這會每次發生在實個體、實例上任何屬性變更時發生。

參數

attribute: string

變更信號將返回的指定屬性的名稱。


返回

一個發生在指定屬性變更時發生的事件。

GetAttributes

平行寫入

此方法為每個屬性的鑰匙值對返回一個鑰匙值對應的對象的典型值。

舉例來說,下列代碼摘要會輸出實個體、實例的屬性和值:


local part = workspace.Part
part:SetAttribute("InitialPosition", part.Position)
part:SetAttribute("CanUse", true)
for name, value in part:GetAttributes() do
print(name .. " = " .. value)
end

也參閱 Instance:GetAttribute() 以返回指定屬性名稱的值。


返回

一個用於描述每個特性的字串 → 變體對應的字串對應器,其中變體是名稱屬性,零值是非零值。

GetChildren

Instances
平行寫入

返回一個包含所有案個體、實例直接子女的陣列(數字索引表),或者每個 Instance 的子女,其 Parent 與對物件相等。陣列可以使用任何數字或汽輪表來重複:


-- 數字 for- loop 範例
local children = workspace:GetChildren()
for i = 1, #children do
local child = children[i]
print(child.Name .. " is child number " .. i)
end

-- 一般 for- loop 範例
local children = workspace:GetChildren()
for i, child in children do
print(child.Name .. " is child number " .. i)
end

孩子們依次按照其Parent屬性設定在對物件上。

也參閱 GetDescendants 函數。


返回

Instances

包含實個體、實例子孫的陣列。

範例程式碼

Instance:GetChildren

local children = workspace:GetChildren()
for i = 1, #children do
print(i, children[i].Name)
end

GetDebugId

無法瀏覽
外掛程式安全性

返回 Roblox 內部使用的測試ID 的代碼字串。

注意:

  • 此項目受到保護。嘗試在 ScriptLocalScript 中使用它會導致錯誤
  • 在開發中,使用 debug ID 來記錄每個程式碼的執行情況。這樣可以讓程式碼編寫者在程式碼執行後立即讀取程式碼,以便進行調試。如果需要,Roblox 中的所有對象都會像程式碼處理器一樣運行。
  • 這可能有助於區分類似對象 (例如分享相同名稱的對象)

參數

scopeLength: number

范圍長度。

預設值:4

返回

Debug ID 字串。

範例程式碼

Instance:GetDebugId

print(workspace:GetDebugId()) --> 39FA_12
print(workspace:GetDebugId(10)) --> 39FA2FEF4D_12
print(workspace:GetDebugId(math.huge)) --> 12

GetDescendants

平行寫入

此對象方法返回一個包含所有該對物件子孫的陣列。與 Instance:GetChildren() 不同,它只返回對物件的即時子孫,此方法找到所有子孫的對物件、所有子孫的子孫和所有子孫的子孫。


返回

包含實個體、實例子孫的陣列。

範例程式碼

Instance:GetDescendants

local descendants = workspace:GetDescendants()
-- Loop through all of the descendants of the Workspace. If a
-- BasePart is found, the code changes that parts color to green
for _, descendant in pairs(descendants) do
if descendant:IsA("BasePart") then
descendant.BrickColor = BrickColor.Green()
end
end

GetFullName

平行寫入

返回一個描述實個體、實例祖先的字串。字串是由 Name 的對象和它的祖先,以區分期間分開的。 DataModel ( game ) 不是考慮。例如, 1>Class.Part1> 在 <

當呼叫 <a href="/reference/engine/datamodel.md">Class.Instance</a> 不是 <a href="/reference/engine/datamodel.md">Class.DataModel</a> 的子孫時,此功能會考慮所有上至和包括最上一個 <a href="/reference/engine/datamodel.md">Class.Instance.Parent|Parent</a> 的所有祖先。

此功能可用於記錄和調試。 您不應嘗試解析返回的字符串以取得任何有用的操作;此功能不會逃脫期 (或任何其他符號) 在對象名稱中。 以其他話,雖然它的輸出通常看起來是有效的 Lua 識別器,但它不是保證。


返回

Class.Instance 的完整名稱。

範例程式碼

Instance:GetFullName

-- Create a simple hierarchy
local model = Instance.new("Model")
local part = Instance.new("Part")
part.Parent = model
local fire = Instance.new("Fire")
fire.Parent = part
print(fire:GetFullName()) --> Model.Part.Fire
model.Parent = workspace
print(fire:GetFullName()) --> Workspace.Model.Part.Fire
part.Name = "Hello, world"
print(fire:GetFullName()) --> Workspace.Model.Hello, world.Fire
Instance:GetFullName Lua Implementation

local function getFullName(object)
local result = object.Name
object = object.Parent
while object and object ~= game do
-- Prepend parent name
result = object.Name .. "." .. result
-- Go up the hierarchy
object = object.Parent
end
return result
end
print(getFullName(workspace.Camera)) --> Workspace.Camera

GetStyled

Variant

參數

name: string

返回

Variant

GetTags

平行寫入

此方法將應用於指定實個體、實例的標籤列為串返回,您可以在 Studio 中的 屬性 窗口或在執行時與 AddTag() 加入標籤。

此方法有助於您想要在多個標籤上同時執行某些操作時。 但是,它不是很有效的使用此方法來檢查單一標籤的存在;相反,使用 HasTag() 來檢查特定標籤。


返回

HasTag

平行寫入

此方法會返回 true 如果提供的標籤已添加到對物件。您可以在 Studio 中的 屬性 窗口或在執行時的 Class.Instance:AddTag()|AddTag() 中添加標籤。

參數

tag: string

返回

IsAncestorOf

平行寫入

如果 Instance 是指定的後代的祖先,則返回 true。

Class.Instance 被視為對象的祖先,如果對物件的 Instance.Parent 或其父父元素的 Instance.Parent 設置為 1> Class.Instance1> 。

也參閱, Instance:IsDescendantOf()

參數

descendant: Instance

Class.Instance 的後代。


返回

對於 Instance 是否是指派後代的祖先。

範例程式碼

Instance:IsAncestorOf()

local Workspace = game:GetService("Workspace")
local spawnLocation = Workspace.SpawnLocation
local decal = spawnLocation.Decal
-- These statements are true
print(Workspace:IsAncestorOf(spawnLocation))
print(Workspace:IsAncestorOf(decal))
print(spawnLocation:IsAncestorOf(decal))
-- These statements are false
print(spawnLocation:IsAncestorOf(Workspace))
print(decal:IsAncestorOf(Workspace))
print(decal:IsAncestorOf(spawnLocation))

IsDescendantOf

平行寫入

如果 Instance 是繼承從指定的祖先。

Class.Instance 被視為對象的後代,如果它的父親或其父元素親的一個親設定為對物件。

注意,DataModel 是 nil 的後代。這意味著 IsDescendantOf 無法使用 nil 參數檢查對象是否已移除。

也參閱, Instance:IsAncestorOf()

參數

ancestor: Instance

祖先 Instance


返回

對於 Instance 是否是繼承從指定祖先。

範例程式碼

Instance:IsDescendantOf

local part = Instance.new("Part")
print(part:IsDescendantOf(game))
--> false
part.Parent = workspace
print(part:IsDescendantOf(game))
--> true
part.Parent = game
print(part:IsDescendantOf(game))
--> true

RemoveTag

void

此方法從實個體、實例中移除標籤。如果對象沒有標籤,也不會發生錯誤。成功移除標籤會發生成功移除標籤的信號,並且使用 CollectionService:GetInstanceRemovedSignal() 與指定標籤。

注意,標記實個體、實例時,有些資源會被使用來提供標記的功能,例如事件連接或桌子。為了防止記憶體漏失,建議您在沒有標記需要時清理這些 (連接到 nil 等) 。

參數

tag: string

返回

void

SetAttribute

void

此方法將指定的名稱設置為指定的值。如果指定的值為 nil,則會移除屬性,因為 nil 是預設值。

例如,下列代碼 snippet 設置了實個體、實例的 初始位置 屬性為 Vector3.new(0, 10, 0)


local part = workspace.Part
part:SetAttribute("InitialPosition", Vector3.new(0, 10, 0))

限制

命名要求和限制:

  • 名稱只能使用字母數字字符和撫子。
  • 不允許任何空格或獨特符號。
  • 字串必須少於 100 個字元。
  • 名稱不允許以 RBX 開始,除非來自 Roblox 核心指令碼 (僅適用於 Roblox)。

嘗試將屬性設為未支援類輸入時,將發生錯誤。

也看:

參數

attribute: string

設定屬性的名稱。

value: Variant

設定指定屬性的值。


返回

void

WaitForChild

可暫停

返回 Instance 中的子孫,並且使用指定的名稱。如果子孫不存在,它將返回當前線程直到它存在。如果 timeOut 參數指定為指定的數秒後,此方法將在指定的數秒後到期 nil

主要用途

WaitForChild() 是在 LocalScript 中工作的客玩家端程式碼的重要部分。 Roblox 引擎不保證時間或程式碼順

注意

  • 此函數不會產生,如果有指定名稱的兒童存在,當呼叫時。
  • Instance:FindFirstChild() 是一種更有效的替代方案,WaitForChild() 對於假設存在的對象。
  • 如果不返回,並且超過 5 秒,此方法的呼叫,沒有指定 timeOut 參數,警告將在輸出上打印,這是警告,因為沒有指定 timeOut 參數,將會導致無法預測的輸出。

參數

childName: string

要尋找的 Instance.Name

timeOut: number

可選的時間參數。


返回

範例程式碼

Instance:WaitForChild

local part = workspace:WaitForChild("Part")
print(part.Name .. " has been added to the Workspace")

活動

AncestryChanged

發生在 Instance.Parent 對象或其祖先的一個屬性變更時。

此事件包含兩個參數,childparentChild指的是1> Class.Instance1> 的其前身。4> 親4> 指的是此實個體、實例的新7> Class.Instance.Parent7>。0> 親0> 指的是此9> Class.Instance9>

您可以使用此事件來追蹤 Studio 中的實例刪除,例如在 Explorer 中手動刪除或通過外掛程式。如果您需要檢測使用 Instance:Destroy() 來摧毀實例的時間,請使用 Instance.Destroying 事件。

參數

child: Instance

Class.Instance 的 Instance.Parent 已變更。

parent: Instance

Class.Instance 的新 Instance,其 Instance.Parent 已變更。


範例程式碼

Instance.AncestryChanged

local Workspace = game:GetService("Workspace")
local redPart = script.Parent.RedPart
local bluePart = script.Parent.BluePart
local changingPart = script.Parent.ChangingPart
-- Change the color of changingPart based on it's Parent
local function onAncestryChanged(part: Part, parent: Instance)
if parent == redPart then
changingPart.Color = Color3.new(1, 0, 0)
elseif parent == bluePart then
changingPart.Color = Color3.new(0, 0, 1)
else
changingPart.Color = Color3.new(1, 1, 1)
end
print(`{part.Name} is now parented to {parent.Name}`)
end
changingPart.AncestryChanged:Connect(onAncestryChanged)
-- Set changingPart's Parent property to different instances over time
while true do
task.wait(2)
changingPart.Parent = redPart
task.wait(2)
changingPart.Parent = bluePart
task.wait(2)
changingPart.Parent = Workspace
end

AttributeChanged

這個事件會在實個體、實例上的任何屬性變更時發生,包括當屬性設為 nil 。變更的屬性名稱傳送給連接的函數。

舉例來說,下列代碼 snippet 連接 attributeChanged() 函數,以發射任何零件的屬性變更時:


local part = workspace.Part
local function attributeChanged(attributeName)
print(attributeName, "changed")
end
part.AttributeChanged:Connect(attributeChanged)

也參閱 Instance:GetAttributeChangedSignal(),這會返回一個特定屬性變更時發生的事件。

參數

attribute: string

變更屬性的名稱。


ChildAdded

對象取得此 Instance 後,發射。

注意,使用此功能在客戶端檢測服務器創建的對象時,必須使用 Instance:WaitForChild() 來索引這些對物件的後代。這是因為對象和其後代不保證從服務器到客戶端同時重複。例如:


workspace.ChildAdded:Connect(function(child)
-- need to use WaitForChild as descendants may not have replicated yet
local head = child:WaitForChild("Head")
end)

注意,此功能只適用於 Instance 的即時兒女。對於捕捉所有兒女的功能,請使用 Instance.DescendantAdded

也參閱, Instance.ChildRemoved

參數

child: Instance

已添加的 Instance


範例程式碼

Instance.ChildAdded

local function onChildAdded(instance)
print(instance.Name .. " added to the workspace")
end
workspace.ChildAdded:Connect(onChildAdded)
local part = Instance.new("Part")
part.Parent = workspace --> Part added to the Workspace

ChildRemoved

發生在這個 Instance 中一個兒童被移除後。

移除指稱當 Instance 的父親變更為此 Instance 以外的任何東西時。 注意,此事件也會在兒子被摧毀 (使用 Instance:Destroy() ) 時發生,因為摧毀函數將對物件的父親設為零。

此功能僅適用於 Instance 的即時兒女。對於捕捉所有兒女的功能,請使用 Instance.DescendantRemoving

也參閱 Instance.ChildAdded

參數

child: Instance

已移除的 Instance


範例程式碼

Instance.ChildRemoved

local function onChildRemoved(instance)
print(instance.Name .. " removed from the workspace")
end
workspace.ChildRemoved:Connect(onChildRemoved)
local part = Instance.new("Part")
part.Parent = workspace
task.wait(2)
part:Destroy()

DescendantAdded

子孫添加事件會在子孫被添加到 Instance 之後發生。

作為每個子孫添加火焰為每個子後代,將對此對象和所有子孫單獨發生事件。

開發人員應該只是擔心 Instance 的即將到來的兒女。

也參閱 Instance.DescendantRemoving

參數

descendant: Instance

已添加的 Instance


範例程式碼

Instance.DescendantAdded

local function onDescendantAdded(descendant)
print(descendant)
end
workspace.DescendantAdded:Connect(onDescendantAdded)
local part = Instance.new("Part")
part.Parent = workspace

DescendantRemoving

這個事件會在 立即之前 變更親 Instance 變更,使得一個 後代 實例不再是一個後代。 1>Class.Instance:Destroy()|Destroy()1> 變更親 4>Class.Instance.Parent|Parent4> 到

此事件在此事件發生之前 發生 時,子後代的父親將在此事件發生時變更。如果子孫也是 直接子孫 的父元素親,此事件將在 Instance.ChildRemoved 之前發生。

如果子孫有兒女,這個事件會先發生在子孫,然後在子孫的子孫。

警告

這個事件會在正在被移除的後代對象發生。嘗試將 descendant 的 Parent 設置為其他東西會失敗。以下是一個示例來示範這點:


workspace.DescendantRemoving:Connect(function(descendant)
-- Do not manipulate the parent of the descendant in this function!
-- This event fires BECAUSE the parent was manipulated, and the change hasn't happened yet
-- Therefore, it is problematic to change the parent like this:
descendant.Parent = game
end)
local part = Instance.new("Part")
part.Parent = workspace
part.Parent = nil

也參閱 DescendantAdded

參數

descendant: Instance

正在移除的 Instance


範例程式碼

Instance.DescendantRemoving

workspace.DescendantRemoving:Connect(function(descendant)
print(descendant.Name .. " is currently parented to " .. tostring(descendant.Parent))
end)
local part = Instance.new("Part")
part.Parent = workspace
part.Parent = nil
--> Part is currently parented to Workspace
print(part.Parent)
--> nil

Destroying

Class.Instance 將永遠不會從記憶體中刪除,因為連接的函數仍在使用它。但如果函數在任何時間輸出,Instance 和其後代將會被指定為 nil 的父級。

如果 Workspace.SignalBehavior 屬性設為 Enum.SignalBehavior.Immediate ,此事件會立即發生,直到 Instance 或其任何一個子集被摧毀,使用 1>Class.Instance:Destroy()1> 。

如果 Workspace.SignalBehavior 屬性設為 Enum.SignalBehavior.Deferred,此事件會在下一個重新恢復點發生,這會在 Instance 或其任何一個子集壞損使用 1> Class.Instance:Destroy()1> 後發生。

使用 Deferred 行為連接到自己的 Instance.Destroying 事件時,連接到指定的 Class.Instance.Destruct 事件的指示碼碼會是個問題,因為指定的 1>Class.Instance.Destruct1> 事件將在回調無法呼叫之前被摧毀 (意味著它將無法執行)。

在 Studio 中刪除 Instance 時,如果是手動刪除通過 探險家 或通過外掛程式,Instance 不會被摧毀。相反,親將設置為 1> nil1> ,這是您可以追蹤的 4> Class.Instance.AncestryChanged4> 。


範例程式碼

Using the Destroying Event (Immediate signals)

local part = Instance.new("Part", workspace)
local function onPartDestroying()
print("Before yielding:", part:GetFullName(), #part:GetChildren())
task.wait()
print("After yielding:", part:GetFullName(), #part:GetChildren())
end
part.Destroying:Connect(onPartDestroying)
part:Destroy()
Using the Destroying Event (Deferred signals)

local part = Instance.new("Part", workspace)
local function onPartDestroying()
print("In signal:", part:GetFullName(), #part:GetChildren())
end
part.Destroying:Connect(onPartDestroying)
print("Before destroying:", part:GetFullName(), #part:GetChildren())
part:Destroy()
print("After destroying:", part:GetFullName(), #part:GetChildren())