Instance
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Instance ist die Basisklasse für alle Klassen in der Roblox-Klassenpyramide, die Teil des DataModel Baums sein können.
Es ist nicht möglich, direkt Wurzel Instance Objekte zu erstellen, aber der spezielle Instance.new() Konstruktor erstellt Objekte über Code, nimmt den Namen der Klasse als Parameter und gibt das erstellte Objekt zurück.
Zusammenfassung
Eigenschaften
Bestimmt, ob ein Instance und seine Nachkommen mit Instance:Clone() geklont werden können und gespeichert/veröffentlicht werden können.
Die Gruppe der Fähigkeiten, die für Skripte innerhalb dieses Containers verwendet werden kann.
Eine nicht eindeutige Kennung des Instance.
Bestimmt den hierarchischen Eltern des Instance.
Eine veraltete Eigenschaft, die dazu gedient hat, CoreGui Objekte zu schützen.
Verwandelt die Instanz in einen sandboxierten Container.
Eine eindeutige Kennung für die Instanz.
Methoden
Wendet einen Tag auf die Instanz an.
Diese Funktion zerstört alle Kinder einer Instanz.
Erstelle eine Kopie einer Instanz und all ihrer Nachkommen, unabhängig von Instanzen, die nicht Archivable sind.
Setzt die Eigenschaft Instance.Parent auf nil, sperrt die Eigenschaft Instance.Parent und trennt alle Verbindungen und ruft Destroy() auf allen Kindern auf.
Gibt den ersten Vorfahren der Instance zurück, dessen Instance.Name dem angegebenen Namen gleich ist.
Gibt den ersten Vorfahren der Instance zurück, dessen Object.ClassName dem angegebenen Klassen gleich ist.
Gibt den ersten Vorfahren der Instance für zurück, für den Object:IsA() wahr ist, für die angegebene Klasse.
Gibt das erste Kind der Instance mit dem angegebenen Namen zurück, die mit dem angegebenen Namen gefunden wurde.
Gibt das erste Kind der Instance, deren ClassName dem angegebenen Klassennamen gleich ist.
Gibt das erste Kind der Instance für zurück, für die Object:IsA() wahr ist, für die angegebene Klasse.
Gibt den ersten Nachkommen zurück, der mit dem angegebenen Instance.Name gefunden wurde.
Gibt die Actor zurück, die mit der Instanz verbunden sind, wenn es welche gibt.
Gibt den Wert zurück, der dem angegebenen Attributnamen zugewiesen wurde.
Gibt ein Ereignis zurück, das abgefeuert wird, wenn das angegebene Attribut geändert wird.
Gibt ein Wörterbuch der Attribute der Instanz zurück.
Gibt ein Array zurück, das alle Kinder der Instanz enthält.
Gibt eine kodierte Zeichenkette der Fehler-ID zurück, die von Roblox intern verwendet wird.
Gibt ein Array zurück, das alle Nachkommen der Instanz enthält.
Gibt eine Zeichenkette zurück, die die Vorfahren der Instanz beschreibt.
Gibt den gestilten oder explizit modifizierten Wert der angegebenen Eigenschaft zurück, oder sonst den Standard-Eigenschaftswert, wenn er nicht gestylt/modifiziert wurde.
Erhalte eine Liste aller Tags, die auf die Instanz angewendet werden.
Überprüfe, ob die Instanz ein bestimmtes Tag hat.
Gibt wahr zurück, wenn ein Instance ein Vorfahrt des angegebenen Nachkommens ist.
Gibt true zurück, wenn ein Instance ein Nachkomme des angegebenen Vorfahren ist.
Gibt true zurück, wenn der in der angegebenen Eigenschaft gespeicherte Wert dem Code-instanzierten Standard gleich ist.
Entfernt ein Tag von der Instanz.
Setzt ein Eigenschaft auf ihren Standardwert zurück.
Setzt das Attribut mit dem angegebenen Namen auf den angegebenen Wert.
Gibt das Kind des Instance mit dem angegebenen Namen zurück. Wenn das Kind nicht existiert, wird es den aktuellen Thread ergeben, bis es dies tut.
Ereignisse
Feuert, wenn die Instance.Parent Eigenschaft des Objekts oder eine seiner Vorfahren geändert wird.
Feuert immer dann, wenn ein Attribut auf der Instance geändert wird.
Feuert nachdem ein Objekt diesem Instance zugewiesen wurde.
Feuert nachdem ein Kind von diesem Instance entfernt wurde.
Feuert nachdem ein Nachkomme zum Instance hinzugefügt wurde.
Feuert sofort, bevor ein Nachkomme der Instance entfernt wird.
Feuert sofort vor (oder wird verschoben bis) die Instanz via Instance:Destroy() zerstört wird.
Feuert immer dann, wenn eine Style-Eigenschaft auf der Instanz geändert wird, einschließlich dann, wenn eine Eigenschaft auf nil gesetzt wird.
Eigenschaften
Archivable
Diese Eigenschaft bestimmt, ob die Instanz enthalten sein soll, wenn die Erfahrung veröffentlicht oder gespeichert wird, oder wenn Clone() auf einem der Vorfahren der Instanz aufgerufen wird.Das Direktaufrufen von auf einer Instanz wird zurückgeben, wenn diese Instanz nicht ist .
Das Kopieren eines Objekts in Studio mit den Optionen Duplizieren oder Kopieren / Einfügen ignoriert seine eigene Archivable Eigenschaft und setzt Archivable auf true für die Kopie.
local part = Instance.new("Part")print(part:Clone()) --> Partpart.Archivable = falseprint(part:Clone()) --> nil
Capabilities
Die Gruppe der Fähigkeiten, die für Skripte innerhalb dieser Instanz verwendet werden können.Für die Inkraftsetzung der Fähigkeiten muss die Instance.Sandboxed Eigenschaft aktiviert sein.
Diese Eigenschaft wird von einer experimentellen Funktion verwendet. Siehe Skript-Fähigkeiten für weitere Details.
Name
Eine nicht eindeutige Kennung des Instance.Namen werden verwendet, um die Objektarchitektur zu organisieren und Skripten den Zugriff auf spezifische Objekte zu ermöglichen.Der Name einer Instanz darf nicht mehr als 100 Zeichen groß sein.
Der Name eines Objekts wird oft verwendet, um auf das Objekt über die Datenmodell-Hierarchie mit den folgenden Methoden zuzugreifen:
local Workspace = game:GetService("Workspace")local baseplate = Workspace.Baseplatelocal baseplate = Workspace["Baseplate"]local baseplate = Workspace:FindFirstChild("BasePlate")
Um ein Objekt mit dem Punktoperator ( . ) zugänglich zu machen, muss sein Name mit einem Unterstrich oder einem Buchstaben beginnen, und der Rest des Namens kann nur Buchstaben, Zahlen oder Unterstriche enthalten (keine anderen Sonderzeichen).Wenn der Name eines Objekts dieser Syntax nicht folgt, ist es nicht über den Punkt-Operator zugänglich und Luau interpretiert seinen Namen nicht als Identifikator.
Wenn mehr als ein Objekt mit demselben Namen Geschwister sind, wird jede Versuche, ein Objekt nach diesem Namen zu indexieren, nur eines der Objekte zurückgeben, ähnlich wie Instance:FindFirstChild(), aber nicht immer das gewünschte Objekt.Wenn ein bestimmtes Objekt über Code zugänglich sein muss, wird empfohlen, es einen einzigartigen Namen zu geben oder zu garantieren, dass keiner seiner Geschwister denselben Namen teilt.
Siehe auch Instance:GetFullName(), um einen vollständigen Namen zu erhalten, einschließlich der Hierarchie des Objekts.
Parent
Die Eigenschaft Parent bestimmt den hierarchischen Eltern des Instance.Die folgende Terminologie wird häufig verwendet, wenn es darum geht, wie diese Eigenschaft festgelegt wird:
Ein Objekt ist ein Kind von, oder wird übernommen , ein anderes Objekt, wenn sein Parent auf dieses Objekt festgelegt ist.
Die Nachkommen eines Instance sind die Kinder dieses Objekts, plus die Nachkommen der Kinder ebenfalls.
Die Vorfahren eines Instance sind alle Objekte, von denen die Instanz ein Nachkomme ist.
Es ist von der Parent Eigenschaft, dass viele andere API-Mitglieder ihren Namen erhalten, wie GetChildren() und FindFirstChild().Diese Eigenschaft wird auch verwendet, um zu verwalten, ob ein Objekt in der Erfahrung existiert oder entfernt werden muss.Solange der Eltern eines Objekts in der DataModel , in einer Variable gespeichert wird oder durch das Eigenschaft eines anderen Objekts referenziert wird, bleibt das Objekt in der Erfahrung; ansonsten wird das Objekt automatisch entfernt.
Das Aufrufen von Destroy() wird die Parent eines Instance und all seiner Nachkommen auf nil festlegen, und auch sperren die Parent Eigenschaft.Bei der Festlegung des Parent eines zerstörten Objekts wird ein Fehler erhoben.
Neu erstellte Objekte mit Instance.new() werden keinen Eltern haben und sind normalerweise nicht sichtbar oder funktionsfähig, bis ein Eltern festgelegt wird.
Objekt-Replikation
Ein von dem Server erstelltes Objekt wird sich nicht auf Clients replizieren, bis es einem Objekt zugewiesen wird, das repliziert wird.Wenn du ein Objekt erstellst und viele Eigenschaften festlegst, wird empfohlen, die Eigenschaft Parent zu setzen last .Dies gewährleistet, dass das Objekt einmal repliziert wird, anstatt viele Eigenschaftsänderungen zu replizieren.
local Workspace = game:GetService("Workspace")-- Setze den Eltern der neuen Instanz zuletzt (empfohlen)local part = Instance.new("Part")part.Position = Vector3.new(0, 10, 0)part.Parent = Workspace
Wenn jedoch Elternteile an einen Model übertragen werden, dessen Elternteil noch nicht festgelegt wurde, ist die Übertragung jedes Teils an dieses Modell akzeptabel, da das Modell nicht repliziert worden wäre.
RobloxLocked
Diese Eigenschaft wurde verwendet, um Objekte im CoreGui vor Änderungen durch Benutzer in unautorisierter Weise zu schützen.Es wurde veraltet und tut nichts.
Sandboxed
Verwandelt die Instanz in einen verschachtelten Container , eine experimentelle Funktion, die die Aktionen einschränkt, die Skripte innerhalb eines bestimmten Containers ausführen können.Siehe Skript-Fähigkeiten für weitere Details.
UniqueId
Eine eindeutige Kennung für die Instanz, die sich von Instance.Name unterscheidet, die nicht unbedingt einzigartig ist.
Methoden
AddTag
Diese Methode fügt einem Tag der Instanz einen Effekt hinzu, ohne dass es Auswirkungen hat, wenn der Tag bereits angewendet wird.Der erfolgreiche Hinzuschalten eines Tags schaltet ein Signal ab, das von CollectionService:GetInstanceAddedSignal() mit dem angegebenen Tag erstellt wurde.
Warnungen
Die Tags einer Instanz, die auf clientseitig hinzugefügt wurden, werden fallen gelassen, wenn der Server später ein Tag auf dieser Instanz hinzufügt oder entfernt, weil der Server alle Tags zusammen repliziert und vorherige Tags überschreibt.
Wenn Sie eine Instanz kennzeichnen, ist es üblich, dass einige Ressourcen verwendet werden, um dem Tag seine Funktionalität zu geben, zum Beispiel Ereignisverbindungen oder Tabellen.Um Speicherlecks zu verhindern, ist es eine gute Idee, diese zu löschen (verbinden Sie sich ab, stellen Sie auf nil ein usw.), wenn sie für einen Tag nicht mehr benötigt werden.Tun Sie dies, wenn Sie Instance:RemoveTag() aufrufen, Instance:Destroy() aufrufen oder in einer Funktion, die mit einem von CollectionService:GetInstanceRemovedSignal() zurückgegebenen Signal verbunden ist.
Parameter
Rückgaben
ClearAllChildren
Diese Funktion zerstört alle Kinder und Nachkommen einer Instanz.
local part = Instance.new("Part")-- Add some sparklesfor i = 1, 3 dolocal sparkles = Instance.new("Sparkles")sparkles.Parent = partlocal sc = Instance.new("Sparkles")sc.Parent = sparklesendprint("Children:", #part:GetChildren()) --> Children: 3part:ClearAllChildren()print("Children:", #part:GetChildren()) --> Children: 0
Wenn du nicht alle Kinder und Nachkommen zerstören möchtest, verwende entweder Instance:GetChildren() oder Instance:GetDescendants(), um durch diese Kinder/Nachkommen zu schleifen und auszuwählen, was zu zerstören ist.Zum Beispiel wird das folgende Codebeispiel alle BaseParts absteigend von einem Model zerstören:
local Workspace = game:GetService("Workspace")local model = Workspace:FindFirstChild("TestModel")for _, descendant in model:GetDescendants() doif descendant:IsA("BasePart") thendescendant:Destroy()endend
Rückgaben
Clone
Clone() erstellt eine Kopie einer Instanz und all ihrer Nachkommen, ignoriert alle Instanzen, die nicht Archivable sind.Die Kopie der Wurfinstanz wird mit dieser Methode zurückgegeben und ihre Parent wird auf nil gesetzt.Beachten Sie, dass, wenn die Instanz selbst auf Archivable gesetzt ist auf false, diese Funktion nil zurückgibt.
Wenn eine Referenz属性 wie ObjectValue.Value in einer geklonten Instanz festgelegt wird, hängt der Wert der Kopieigenschaft vom Wert der ursprünglichen属性 ab:
- Wenn eine Referenz-Eigenschaft sich auf eine Instanz bezieht, die auch geklont wurde , wird die Kopie sich auf die Kopie beziehen.
- Wenn eine Referenz-Eigenschaft sich auf ein Objekt bezieht, das nicht geklont wurde , wird der gleiche Wert in der Kopie beibehalten.
Rückgaben
Code-Beispiele
Demonstrates cloning a model using Instance:Clone().
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
Setzt die Eigenschaft Instance.Parent auf nil, sperrt die Eigenschaft Instance.Parent und trennt alle Verbindungen und ruft Destroy() auf allen Kindern auf.Diese Funktion ist der korrekte Weg, um Objekte loszuwerden, die nicht mehr benötigt werden.
Die Entfernung unbenötigter Objekte ist wichtig, da unnötige Objekte und Verbindungen an einem Ort Speicher verbrauchen, was mit der Zeit zu ernsthaften Leistungsproblemen führen kann.
Als Best Practice, nachdem du Destroy() auf ein Objekt aufgerufen hast, lege alle Variablen, die sich auf das Objekt (oder seine Nachkommen) beziehen, auf nil fest.Dies verhindert, dass dein Code etwas mit dem Objekt zu tun hat.
local part = Instance.new("Part")part.Name = "Hello, world"part:Destroy()-- Tun Sie das nicht:print(part.Name) --> "Hallo, Welt"-- Tun Sie dies, um die obige Zeile von der Arbeit zu verhindern:part = nil
Sobald ein Instance durch diese Methode zerstört wurde, kann es nicht wiederverwendet werden, da die Instance.Parent Eigenschaft gesperrt ist.Um vorübergehend ein Objekt zu entfernen, anstatt es zu zerstören, setze Parent auf nil.Zum Beispiel:
local Workspace = game:GetService("Workspace")object.Parent = niltask.wait(2)object.Parent = Workspace
Um ein Objekt nach einer bestimmten Zeit zu zerstören, verwende Debris:AddItem().
Rückgaben
Code-Beispiele
Zeigt die Zerstörung eines Teils mit der Instance:Destroy()-Funktion auf.
Diese Funktion ist der korrekte Weg, um Objekte loszuwerden, die nicht mehr benötigt werden.
local part = script.Parent.Part
part:Destroy()
FindFirstAncestor
Gibt den ersten Vorfahren der Instance zurück, dessen Instance.Name dem angegebenen Namen gleich ist.
Diese Funktion funktioniert nach oben, d.h. sie beginnt bei der unmittelbaren Instanz Instance.Parent und arbeitet sich nach oben bis zur DataModel.Wenn kein passender Vorfahre gefunden wird, gibt er nil zurück.
Das folgende Code-Snippet würde den ersten Vorfahren des Objekts namens Car finden.
local car = object:FindFirstAncestor("Car")
Für Varianten dieser Funktion, die Vorfahren einer bestimmten Klasse finden, siehe Instance:FindFirstAncestorOfClass() und Instance:FindFirstAncestorWhichIsA().
Parameter
Die Instance.Name , die gesucht werden müssen.
Rückgaben
FindFirstAncestorOfClass
Gibt den ersten Vorfahren der Instance zurück, dessen Object.ClassName dem angegebenen Klassen gleich ist.
Diese Funktion funktioniert nach oben, d.h. sie beginnt bei der unmittelbaren Instanz Instance.Parent und arbeitet sich nach oben bis zur DataModel.Wenn kein passender Vorfahre gefunden wird, gibt er nil zurück.
Eine häufige Verwendung dieser Funktion ist die Feststellung, dass Model eine BasePart gehört. Zum Beispiel:
local model = part:FindFirstAncestorOfClass("Model")
Diese Funktion ist eine Variante von Instance:FindFirstAncestor(), die das Eigenschaft Object.ClassName überprüft, anstatt Instance.Name.Instance:FindFirstAncestorWhichIsA() existiert auch, verwendet die Methode Object:IsA() anstelle der Klassen-Erbschaft zu respektieren.
Parameter
Die Object.ClassName , die gesucht werden müssen.
Rückgaben
FindFirstAncestorWhichIsA
Gibt den ersten Vorfahren der Instance für zurück, für den Object:IsA() wahr ist, für die angegebene Klasse.
Diese Funktion funktioniert nach oben, d.h. sie beginnt bei der unmittelbaren Instanz Instance.Parent und arbeitet sich nach oben bis zur DataModel.Wenn kein passender Vorfahre gefunden wird, gibt er nil zurück.
Im Gegensatz zu Instance:FindFirstAncestorOfClass() verwendet diese Funktion Object:IsA(), die die Klassen-Erbschaft respektiert. Zum Beispiel:
print(part:IsA("Part")) --> trueprint(part:IsA("BasePart")) --> trueprint(part:IsA("Instance")) --> true
Daher wird das folgende Codebeispiel den ersten BasePart Vorfahren zurückgeben, unabhängig davon, ob es sich um einen WedgePart , MeshPart oder Part handelt.
local part = object:FindFirstAncestorWhichIsA("BasePart")
Siehe auch Instance:FindFirstAncestor().
Parameter
Die Object.ClassName , die gesucht werden müssen.
Rückgaben
FindFirstChild
Gibt das erste Kind der Instance mit dem angegebenen Namen zurück oder nil wenn kein solches Kind existiert.Wenn das optionale recursive Argument true ist, sucht diese Funktion alle Nachkommen, anstatt nur die unmittelbaren Kinder des Instance .
Überprüfen der Existenz eines Objekts
FindFirstChild() ist erforderlich, wenn Sie überprüfen müssen, dass ein Objekt vor dem Fortfahren existiert.Wenn versucht wird, ein Kind mit dem Namen des Punktoпераators zu verzeichnen, wird ein Fehler ausgeworfen, wenn das Kind nicht existiert.
local Workspace = game:GetService("Workspace")-- Die folgenden Fehlerzeilen, wenn das Teil nicht im Arbeitsbereich existiertWorkspace.Part.Transparency = 0.5
Ein besserer Ansatz ist die Verwendung von FindFirstChild(), um zuerst nach Part zu suchen, dann eine if-Anweisung zu verwenden, um Code auszuführen, der es benötigt.
local Workspace = game:GetService("Workspace")local part = Workspace:FindFirstChild("Part")if part thenpart.Transparency = 0.5end
Ein Kind finden, dessen Name ein Eigenschaft entspricht
Manchmal ist das Name eines Objekts dasselbe wie das einer Eigenschaft seiner Parent .Wenn der Dot-Operator verwendet wird, haben Eigenschaften den Vorrang vor Kindern, wenn sie einen Namen teilen.
Im folgenden Beispiel wird ein Folder mit dem Namen Color zu einem Part hinzugefügt, das auch die Eigenschaft Part.Color besitzt.Beachten Sie, dass part.Color sich auf den Color3 Eigenschaftswert bezieht, nicht auf die Kind-Folder Instanz.Ein Vorteil der Verwendung von FindFirstChild() ist, dass die Einführung neuer Eigenschaften kein Risiko für deinen Code darstellt.
local part = Instance.new("Part")local folder = Instance.new("Folder")folder.Name = "Color"folder.Parent = partlocal c1 = part.Color -- Die Eigenschaftlocal c2 = part:FindFirstChild("Color") -- The child folder
Leistungsnotizen
FindFirstChild() dauert etwa 20% länger als die Verwendung des Dot-Operators und fast 8-mal länger als die einfache Speicherung einer Referenz auf ein Objekt.Daher solltest du es vermeiden, es in Leistungsabhängigem Code wie in engen Schleifen oder Funktionen, die mit und verbunden sind, aufzurufen.Stattdessen speichere das Ergebnis in einer Variable oder betrachte die Verwendung von ChildAdded oder WaitForChild(), um zu erkennen, wann ein Kind eines bestimmten Namens verfügbar wird.
Parameter
Das Instance.Name , das gesucht werden soll.
Ob die Suche recursiv durchgeführt werden soll oder nicht.
Rückgaben
Code-Beispiele
Das Folgende würde im Arbeitsbereich nach einem Objektnamen "Brick" suchen. Wenn es gefunden wird, wird der Name des Objekts in "Foo" geändert.
local found = workspace:FindFirstChild("Brick")
if found then
found.Name = "Foo"
end
FindFirstChildOfClass
Gibt das erste Kind der Instance, deren ClassName dem gegebenen className gleich ist.Im Gegensatz zu Instance:FindFirstChildWhichIsA() gibt diese Funktion nur Objekte zurück, deren Klasse className entspricht, die Klassen-Erbschaft ignoriert.Wenn kein passendes Kind gefunden wird, gibt diese Funktion nil zurück.
Parameter
Die Object.ClassName , die gesucht werden müssen.
Rückgaben
Code-Beispiele
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
Gibt das erste Kind der Instance für zurück, für die Object:IsA() wahr ist, für die angegebene Klasse.
Wenn kein passendes Kind gefunden wird, gibt diese Funktion nil zurück.Wenn das optionale rekursive Argument wahr ist, sucht diese Funktion alle Nachkommen, anstatt nur die unmittelbaren Kinder der Instance .
Im Gegensatz zu Instance:FindFirstChildOfClass() verwendet diese Funktion Object:IsA(), die die Klassen-Erbschaft respektiert. Zum Beispiel:
print(part:IsA("Part")) --> wahrprint(part:IsA("BasePart")) --> wahrprint(part:IsA("Instance")) --> true
Daher wird das folgende Codebeispiel das erste BasePart -Kind zurückgeben, unabhängig davon, ob es ein WedgePart , MeshPart oder Part ist.
local part = object:FindFirstChildWhichIsA("BasePart")
Entwickler, die ein Kind nach Namen suchen, sollten stattdessen Instance:FindFirstChild() verwenden.
Parameter
Das Object.ClassName , das gesucht werden soll.
Ob die Suche recursiv durchgeführt werden soll oder nicht.
Rückgaben
FindFirstDescendant
Gibt den ersten Nachkommen zurück, der mit dem angegebenen Instance.Name gefunden wurde.
Diese Methode ist deaktiviert und nicht verwendbar.Um den ersten Nachkommen einer Instanz zu finden, gilt es, stattdessen den recursive -Parameter auf Instance:FindFirstChild() zu verwenden.
Parameter
Die Instance.Name
Rückgaben
GetActor
Wenn das Instance ein Actor ist, wird das Actor selbst zurückgegeben.Ansonsten wird sein nächster Vorfahre Actor zurückgegeben.Wenn kein Vorfahre ein Actor ist, ist das Ergebnis nil .
Rückgaben
GetAttribute
Diese Methode gibt den Wert zurück, der dem angegebenen Attributnamen zugewiesen wurde. Wenn kein Attribut zugewiesen wurde, wird nil zurückgegeben.
Zum Beispiel legt das folgende Code-Snippet fest und holt dann den Wert des Attributes der Instanz InitialPosition:
local Workspace = game:GetService("Workspace")local part = Workspace.Partpart:SetAttribute("InitialPosition", part.Position)local initialPosition = instance:GetAttribute("InitialPosition")print(initialPosition)
Siehe auch
- Instance:SetAttribute(), der das attribut mit dem angegebenen namen auf den angegebenen wert festlegt.
- Instance:GetAttributes() , die ein wörterbuch von schlüssel-wertpaaren für jedes attribut der instanz zurückgibt.
Parameter
Der Name des Attributs, das abgerufen wird.
Rückgaben
Der Wert, der dem angegebenen Attributnamen zugewiesen wurde. Wenn kein Attribut zugewiesen wurde, wird nil zurückgegeben.
GetAttributeChangedSignal
Diese Funktion gibt ein Ereignis zurück, das sich genau wie das Ereignis Changed verhält, außer dass es nur dann feuert, wenn sich ein bestimmtes angegebenes Attribut ändert; effektiv ist es ähnlich wie GetPropertyChangedSignal() für Attribute.
Es ist im Allgemeinen eine gute Idee, diese Methode anstelle einer Verbindung zu Changed mit einer Funktion zu verwenden, die den Attributnamen überprüft.Subsequente Aufrufe dieser Methode auf demselben Objekt mit demselben Attributnamen geben das gleiche Ereignis zurück.
Das folgende Codebeispiel gibt ein Signal zurück, das die Funktion attributeChanged() auslöst, wenn sich der Attributswert der Teile InitialPosition ändert:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
part:SetAttribute("InitialPosition", part.Position)
local function attributeChanged()
print("Attribute changed")
end
part:GetAttributeChangedSignal("InitialPosition"):Connect(attributeChanged)
Siehe auch Instance.AttributeChanged, das immer dann feuert, wenn ein Attribut auf der Instanz geändert wird.
Parameter
Der Name des angegebenen Attributes, für das das Änderungssignal zurückgegeben wird.
Rückgaben
Ein Ereignis, das abgefeuert wird, wenn sich das angegebene Attribut ändert.
GetAttributes
Diese Methode gibt ein Wörterbuch von Schlüssel-Wertpaaren für jedes Attribut zurück, bei dem der Schlüssel der Name des Attributes und der Wert ein nicht nil Wert ist.
Zum Beispiel gibt das folgende Code-Snippet Ausgaben mit Attributen und Werten einer Instanz aus:
local Workspace = game:GetService("Workspace")local part = Workspace.Partpart:SetAttribute("InitialPosition", part.Position)part:SetAttribute("CanUse", true)for name, value in part:GetAttributes() doprint(name .. " = " .. value)end
Siehe auch Instance:GetAttribute(), die den Wert zurückgibt, der dem angegebenen Attributnamen zugewiesen wurde.
Rückgaben
Ein Wörterbuch von String → Variantenpaaren für jedes Attribut, bei dem der String der Name des Attributes ist und die Variante ein nicht-Null-Wert ist.
GetChildren
Gibt ein Array (eine nummerisch indexierte Tabelle) zurück, das alle direkten Kinder der Instanz enthält oder jedes Instance, dessen Parent dem Objekt gleich ist.Die Liste kann mit einer numerischen oder generischen for-Schleife iteriert werden:
local Workspace = game:GetService("Workspace")-- Zahlenspielschleifen-Beispiellocal children = Workspace:GetChildren()for i = 1, #children dolocal child = children[i]print(child.Name .. " is child number " .. i)end
local Workspace = game:GetService("Workspace")-- Generisches for-Schleifen-Beispiellocal children = Workspace:GetChildren()for i, child in children doprint(child.Name .. " is child number " .. i)end
Die Kinder werden nach der Reihenfolge sortiert, in der ihr Parent Eigenschaft auf das Objekt festgelegt wurde.
Siehe auch die GetDescendants Funktion.
Rückgaben
Ein Array mit den Kindern der Instanz.
Code-Beispiele
The below would print the name of all objects currently in Workspace when ran.
local children = workspace:GetChildren()
for i = 1, #children do
print(i, children[i].Name)
end
GetDebugId
Gibt eine kodierte Zeichenkette der Fehler-ID zurück, die von Roblox intern verwendet wird. Beachten Sie:
- Dieser Gegenstand ist geschützt. Wenn du ihn in einem Script oder LocalScript verwenden möchtest, tritt ein Fehler auf.
- Eine Debug-ID ist eine ID, die in Debugging-Prozessen verwendet wird.Es ermöglicht einem Debugger, jede Anweisung vor dem Ausführen durch eine Anwendung zu lesen.Alle Objekte in Roblox agieren wie Prozesse und jede Ausführungsanweisung (oder "Code"), die bei Bedarf debugged werden kann.
- Dies kann für Plugins hilfreich sein, die ähnliche Objekte voneinander unterscheiden müssen (z. B. Objekte, die denselben Namen teilen).
Parameter
Die Länge des Bereichs.
Rückgaben
Die Debug-ID-Schnur.
Code-Beispiele
print(workspace:GetDebugId()) --> 39FA_12
print(workspace:GetDebugId(10)) --> 39FA2FEF4D_12
print(workspace:GetDebugId(math.huge)) --> 12
GetDescendants
Diese Objekt-Methode gibt eine Liste zurück, die alle Nachkommen dieses Objekts enthält.Im Gegensatz zu Instance:GetChildren(), die nur die unmittelbaren Kinder eines Objekts zurückgibt, findet diese Methode jedes Kind des Objekts, jedes Kind dieser Kinder und so weiter.
Rückgaben
Ein Array mit den Nachkommen der Instanz.
Code-Beispiele
GetDescendants is often used to do something to all the descendants that are a particular type of object. The code in this example uses GetDescendants and Instance:IsA() to find all of the parts in the workspace and turns them green.
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
Gibt eine Zeichenkette zurück, die die Vorfahren der Instanz beschreibt.Die Zeichenkette ist eine Konkatenation des Name des Objekts und seiner Vorfahren, getrennt durch Zeichenstriche.Die DataModel ( game ) wird nicht berücksichtigt.Zum Beispiel kann ein Part in der Workspace möglicherweise Workspace.Part zurückgeben.
Wenn auf einem Instance aufgerufen wird, das kein Nachkomme des DataModel ist, betrachtet diese Funktion alle Vorfahren bis zum obersten ohne Parent.
Diese Funktion ist nützlich für Loggen und Debuggen.Du solltest nicht versuchen, die zurückgegebene Zeichenkette für eine nützliche Operation zu analysieren; diese Funktion entkommt nicht den Perioden (oder anderen Symbolen) in Objektnamen.Mit anderen Worten, obwohl seine Ausgabe oft wie ein gültiger Luau-Identifikator aussieht, ist sie nicht garantiert.
Rückgaben
Code-Beispiele
This code sample demonstrates the behavior of Instance:GetFullName(). It shows how the function behaves when called on an object not in the DataModel hierarchy, and it also shows how the return value does not escape special characters.
-- 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
This code sample re-implements the Instance:GetFullName() function in Lua.
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
Diese Methode gibt den gestilten oder explizit modifizierten Wert der angegebenen Eigenschaft zurück, oder sonst den Standard-Eigenschaftswert, wenn er nicht gestylt/modifiziert wurde.Dies unterscheidet sich leicht vom Zugriff auf den Eigenschaftswert direkt, wie [GuiObject].Rotation, der den Standard- oder modifizierten Wert der Eigenschaft zurückgibt.
local Players = game:GetService("Players")local ReplicatedStorage = game:GetService("ReplicatedStorage")local player = Players.LocalPlayerlocal playerGui = player.PlayerGuilocal HUDContainer = playerGui:WaitForChild("HUDContainer")local coreSheet = ReplicatedStorage:FindFirstChild("CoreSheet")local rule = coreSheet:FindFirstChildWhichIsA("StyleRule")rule.Selector = "TextButton"-- Verweis auf eine Schaltflächelocal button = HUDContainer:FindFirstChildWhichIsA("TextButton")print(button:GetStyled("Rotation")) --> 0 (standardwert)print(button.Rotation) --> 0 (standardwert)-- Drehung durch Style-Regel-Eigenschaft anwendenrule:SetProperty("Rotation", 30)print(button:GetStyled("Rotation")) --> 30 (stylisher wert basierend auf regel)print(button.Rotation) --> 0 (standardwert)-- Stilgebundene Eigenschaft explizit modifizieren/überschreibenbutton.Rotation = 45print(button:GetStyled("Rotation")) --> 45 (modifizierter wert)print(button.Rotation) --> 45 (modified value)
Parameter
Name der zu fragenden Eigenschaft.
Rückgaben
Der gestylte oder explizit modifizierte Wert der angegebenen Eigenschaft oder alternativ der Standard-Eigenschaftswert, wenn er nicht gestylt/modifiziert wurde.
GetStyledPropertyChangedSignal
Diese Methode gibt ein Ereignis zurück, das sich genau wie das Ereignis StyledPropertiesChanged verhält, außer dass es nur dann feuert, wenn die angegebene Stileigenschaft geändert wird.Es ist im Allgemeinen eine gute Idee, diese Methode anstelle einer Verbindung zu StyledPropertiesChanged mit einer Funktion zu verwenden, die den Namen der Eigenschaft überprüft.Subsequente Aufrufe dieser Methode auf demselben Objekt mit demselben Eigenschaftsnamen geben das gleiche Ereignis zurück.
Beachten Sie, dass dieses Ereignis keine Argumente an eine verbundene Funktion übergeben wird, so muss der Wert der geänderten Eigenschaft direkt innerhalb eines Skripts gelesen werden.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local playerGui = player.PlayerGui
local HUDContainer = playerGui:WaitForChild("HUDContainer")
local meterBar = HUDContainer.MeterBar
local function stylePropertyChanged()
print("Style property changed!")
end
meterBar:GetStyledPropertyChangedSignal("AnchorPoint"):Connect(stylePropertyChanged)
Parameter
Name der Stil属ität, für die Änderungen zu hören sind.
Rückgaben
Ereignis, das abgefeuert wird, wenn sich die angegebene Stil-Eigenschaft ändert.
GetTags
Diese Methode gibt eine Reihe der auf die angegebene Instanz angewendeten Tags als Zeichen zurück.Du kannst Tags entweder im Studio-Fenster Eigenschaften hinzufügen oder zur Laufzeit mit AddTag() .
Diese Methode ist nützlich, wenn du etwas mit mehreren Tags auf einer Instanz auf einmal tun möchtest.Es ist jedoch ineffizient, diese Methode zu verwenden, um nach der Existenz eines einzelnen Tags zu suchen; stattdessen verwende HasTag(), um nach einem bestimmten Tag zu suchen.
Rückgaben
HasTag
Diese Methode gibt true zurück, wenn der angegebene Tag dem Objekt hinzugefügt wurde.Du kannst Tags entweder im Studio-Fenster Eigenschaften hinzufügen oder zur Laufzeit mit AddTag() .
Parameter
Rückgaben
IsAncestorOf
Gibt wahr zurück, wenn ein Instance ein Vorfahrt des angegebenen Nachkommens ist.
Ein Instance wird als Vorfahre eines Objekts betrachtet, wenn das Objekt seine Instance.Parent oder eines seiner Eltern Instance.Parent auf die Instance festlegt.
Siehe auch, Instance:IsDescendantOf() .
Parameter
Rückgaben
Code-Beispiele
Demonstrates determining if one instance is the ancestor of another using Instance:IsAncestorOf()
Workspace and SpawnLocation are ancestors of the SpawnLocation's decal. Workspace is an ancestor of SpawnLocation.
SpawnLocation and its decal are descendants of Workspace, not ancenstors. Decal is a descendant to SpawnLocation, not an ancestor.
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
Gibt true zurück, wenn ein Instance ein Nachkomme des angegebenen Vorfahren ist.
Beachten Sie, dass IsDescendantOf() nicht mit einem Parameter von nil verwendet werden kann, um zu überprüfen, ob ein Objekt entfernt wurde.
Siehe auch Instance:IsAncestorOf().
Parameter
Rückgaben
Code-Beispiele
local part = Instance.new("Part")
print(part:IsDescendantOf(game))
--> falsch
part.Parent = workspace
print(part:IsDescendantOf(game))
--> wahr
part.Parent = game
print(part:IsDescendantOf(game))
--> true
IsPropertyModified
Gibt true zurück, wenn der in der angegebenen Eigenschaft gespeicherte Wert dem Code-instanzierten Standard gleich ist.Wenn zum Beispiel die Ausgabe der Eigenschaft von einem den Wert anzeigt, wird die Aufrufung von auf dem Etikett die Rückgabe von erzielen, weil der Standardwert für ist, wenn das Etikett über die Studio-Eingabe-Workflows erstellt wird, anstatt durch die Einfügung durch die Studio-Eingabe-Workflows eingefügt zu werden.
Beachten Sie, dass, wenn diese Methode true zurückgibt, das Styling nicht die Eigenschaft beeinflussen wird, da die explizite Änderung einer Eigenschaft dem Styling vorzuziehen ist.
Parameter
Name der zu fragenden Eigenschaft.
Rückgaben
Boolean, der anzeigt, ob die Eigenschaft modifiziert wurde.
RemoveTag
Diese Methode entfernt ein Tag von einer Instanz.Es wird keine Fehler werfen, wenn das Objekt kein Tag hat.Die erfolgreiche Entfernung eines Tags schaltet ein Signal ab, das von CollectionService:GetInstanceRemovedSignal() mit dem angegebenen Tag erstellt wurde.
Beachten Sie, dass es üblich ist, dass einige Ressourcen verwendet werden, um dem Tag seine Funktionalität zu geben, zum Beispiel Verbindungen zu Ereignissen oder Tabellen.Um Speicherlecks zu verhindern, ist es eine gute Idee, diese zu löschen (verbinden Sie sich ab, stellen Sie auf nil ein usw.), wenn sie für einen Tag nicht mehr benötigt werden.
Parameter
Rückgaben
ResetPropertyToDefault
Setzt ein Eigenschaft auf ihren Standardwert zurück.Zum Beispiel ist das Aufrufen von ResetPropertyToDefault("Rotation") auf einem TextLabel gleichbedeutend mit dem Festlegen seiner Rotation auf 0 (der Standardwert der Eigenschaft).Diese Methode kann verwendet werden, um sicherzustellen, dass das Styling den Standardwert dieser Eigenschaft überschreibt.
Parameter
Name der zu zurücksetzenden Eigenschaft.
Rückgaben
SetAttribute
Diese Methode legt das Attribut mit dem angegebenen Namen auf den angegebenen Wert fest.Wenn der angegebene Wert nil ist, wird das Attribut entfernt, da nil standardmäßig zurückgegeben wird.
Zum Beispiel legt das folgende Code-Snippet das Attribut der Instanz InitialPosition auf Vector3.new(0, 10, 0) fest:
local Workspace = game:GetService("Workspace")local part = Workspace.Partpart:SetAttribute("InitialPosition", Vector3.new(0, 10, 0))
Beschränkungen
Namensanforderungen und Einschränkungen:
- Namen dürfen nur alphanumerische Zeichen und Unterstrich verwenden.
- Keine Leerstellen oder einzigartigen Symbole sind erlaubt.
- Schnüre müssen 100 Zeichen oder weniger sein.
- Namen dürfen nicht mit RBX beginnen, es sei denn, der Anrufer ist ein Roblox-Kernskript (reserviert für Roblox).
Wenn versucht wird, ein Attribut auf einen nicht unterstützten Typ zu setzen, wird ein Fehler geworfen.
Siehe auch
- Instance:GetAttribute(), die den wert zurückgibt, der dem angegebenen attributnamen zugewiesen wurde.
- Instance:GetAttributes() , die ein wörterbuch von schlüssel-wertpaaren für jedes attribut der instanz zurückgibt.
Parameter
Der Name des Attributs, das festgelegt wird.
Der Wert, mit dem das angegebene Attribut festgelegt wird.
Rückgaben
WaitForChild
Gibt das Kind der Instance mit dem angegebenen Namen zurück.Wenn das Kind nicht existiert, wird es den aktuellen Thread ergeben, bis es es tut.Wenn der timeOut -Parameter angegeben wird, läuft diese Methode nach der angegebenen Anzahl von Sekunden ab und gibt nil zurück.
Primäre Verwendung
WaitForChild() ist extrem wichtig, wenn Sie an Code arbeiten, der vom Client in einem LocalScript ausgeführt wird.Die Roblox-Engine garantiert nicht die Reihenfolge oder die Zeit, in der Objekte vom Server zum Client repliziert werden.Zusätzlich, wenn ein Erlebnis auf Wahr gesetzt ist Workspace.StreamingEnabled, können BaseParts nicht zum Client gestreamt werden, die weit weg vom Charakter des Spielers sind, was dazu führen kann, dass Skripte beim Indexieren von Objekten, die auf dem Client noch nicht existieren, beschädigt werden.
Anmerkungen
- Diese Funktion gibt nicht aus, wenn ein Kind mit dem angegebenen Namen existiert, wenn die Anruf getätigt wird.
- Instance:FindFirstChild() ist eine effizientere alternative zu WaitForChild() für objekte, die vermutet werden.
- Wenn ein Anruf bei dieser Methode mehr als 5 Sekunden überschreitet, ohne zurückzukehren, und kein timeOut-Parameter angegeben wurde, wird eine Warnung gedruckt, dass der Thread ununterbrochen ausgegeben werden kann.
Parameter
Die Instance.Name , die gesucht werden müssen.
Ein optioneller Timeout-Parameter.
Rückgaben
Code-Beispiele
The following code waits for an instance named "Part" to be added to Workspace.
local part = workspace:WaitForChild("Part")
print(part.Name .. " has been added to the Workspace")
Ereignisse
AncestryChanged
Feuert, wenn die Instance.Parent Eigenschaft des Objekts oder eine seiner Vorfahren geändert wird.
Dieses Ereignis enthält zwei Parameter: child bezieht sich auf die Instance , deren Instance.Parent tatsächlich geändert wurde, während parent sich auf die neue Instanz von Instance.Parent bezieht.
Du kannst dieses Ereignis verwenden, um die Löschung einer Instanz in Studio zu verfolgen, z. B. manuelle Löschung im Explorer oder durch ein Plugin.Wenn du feststellen musst, wann eine Instanz mit Instance:Destroy() zerstört wird, verwende stattdessen das Instance.Destroying -Ereignis.
Parameter
Die Instance, deren Instance.Parent geändert wurde.
Das neue Instance.Parent der Instance, dessen Instance.Parent geändert wurde.
Code-Beispiele
Demonstrates detecting changes to an instance's ancestry by connecting to the Instance.AncestryChanged event.
The ChangingPart's Parent is set to different values overtime. The parent of the part is the part's ancestor, so the Instance.AncestryChanged event will fire whenever it changes.
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
Dieses Ereignis wird immer dann ausgelöst, wenn ein Attribut auf der Instanz geändert wird, einschließlich dann, wenn ein Attribut auf nil gesetzt wird.Der Name des geänderten Attributes wird an die verbundene Funktion übergeben.
Zum Beispiel verbindet das folgende Code-Snippet die attributeChanged()-Funktion, die immer dann abgefeuert wird, wenn eines der Attributen des Teils geändert wird:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local function attributeChanged(attributeName)
print(attributeName, "changed")
end
part.AttributeChanged:Connect(attributeChanged)
Siehe auch Instance:GetAttributeChangedSignal(), das ein Ereignis zurückgibt, das abgefeuert wird, wenn ein bestimmtes gegebenes Attribut geändert wird.
Parameter
Der Name des Attributs, das geändert wurde.
ChildAdded
Feuert nachdem ein Objekt diesem Instance zugewiesen wurde.
Beachten Sie, wenn Sie diese Funktion auf einem Client verwenden, um Objekte, die vom Server erstellt wurden, zu erkennen, ist es notwendig, Instance:WaitForChild() zu verwenden, wenn Sie die Nachkommen dieser Objekte indexieren.Das liegt daran, dass das Objekt und seine Nachkommen nicht garantiert werden, gleichzeitig vom Server auf den Client zu replizieren.Zum Beispiel:
local Workspace = game:GetService("Workspace")
Workspace.ChildAdded:Connect(function(child)
-- Use WaitForChild() since descendants may not have replicated yet
local head = child:WaitForChild("Head")
end)
Beachten Sie, dass diese Funktion nur für unmittelbare Kinder des Instance funktioniert. Für eine Funktion, die alle Nachkommen einfängt, verwenden Sie Instance.DescendantAdded .
Siehe auch Instance.ChildRemoved.
Parameter
Code-Beispiele
This snippet prints the names of objects as they are added to the Workspace:
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
Feuert nachdem ein Kind von diesem Instance entfernt wurde.
Entfernt bezieht sich darauf, wenn der Eltern eines Objekts von diesem Instance auf etwas anderes geändert wird als dies Instance.Beachten Sie, dass dieses Ereignis auch ausgelöst wird, wenn ein Kind zerstört wird (unter Verwendung von Instance:Destroy() ), da die Zerstörungsfunktion den Eltern eines Objekts auf nil festlegt.
Diese Funktion funktioniert nur für unmittelbare Kinder des Instance. Für eine Funktion, die alle Nachkommen erfasst, verwende Instance.DescendantRemoving .
Siehe auch Instance.ChildAdded.
Parameter
Code-Beispiele
This snippet prints the names of objects as they are removed from the Workspace:
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
Dieses Ereignis wird ausgelöst, nachdem ein Abkömmling dem Instance hinzugefügt wurde.
Da es für jeden Nachkommen feuert, wird das Eltern eines Objekts für dieses Objekt und alle seine Nachkommen einzeln das Ereignis auslösen.
Wenn Sie sich nur um die direkten Kinder der Instance kümmern, verwenden Sie stattdessen Instance.ChildAdded.
Siehe auch Instance.DescendantRemoving.
Parameter
Code-Beispiele
Das folgende Beispiel druckt den Namen eines jeden Objekts aus, das zum Arbeitsbereich hinzugefügt wird:
local function onDescendantAdded(descendant)
print(descendant)
end
workspace.DescendantAdded:Connect(onDescendantAdded)
local part = Instance.new("Part")
part.Parent = workspace
DescendantRemoving
Dieses Ereignis wird sofort vor dem Eltern-Instance ausgelöst, sodass eine Nachkomme-Instanz nicht mehr eine Nachkomme ist. Destroy() ändert eine Instanz' Parent zu nil, so dass das Aufrufen dieser Methode auf einem Nachkommen des Vaters dazu führt, dass dieses Ereignis ausgelöst wird.
Da dieses Ereignis vor dem Entfernen des Nachkommens feuert, bleibt der Elternteil des Nachkommens bei der Zeit des Feuern dieses Ereignisses unverändert.Wenn der Nachkomme auch ein direktes Kind des Elternteils ist, wird dieses Ereignis vor abgefeuert.
Wenn ein Nachkomme Kinder hat, feuert dieses Ereignis zuerst mit dem Nachkommen, gefolgt von seinen Nachkommen.
Warnung
Dieses Ereignis wird mit dem abstehenden Objekt abgefeuert, das entfernt wird.Versuche, die Parent des Nachkommen auf etwas anderes zu setzen, werden fehlschlagen.Das folgende Beispiel zeigt dies:
local Workspace = game:GetService("Workspace")
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
Siehe auch DescendantAdded.
Parameter
Code-Beispiele
The following example prints the name of any descendant as it is being removed from the Workspace:
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
Die Instance wird niemals aus dem Speicher gelöscht, während eine verbundene Funktion sie noch verwendet.Wenn die Funktion jedoch an einem beliebigen Punkt aufgibt, werden die Instance und ihre Nachkommen zu nil übernommen.
Wenn die Eigenschaft Workspace.SignalBehavior auf Enum.SignalBehavior.Immediate gesetzt ist, wird dieses Ereignis sofort ausgelöst, bevor die Instance oder einer ihrer Vorfahren mit Instance:Destroy() zerstört werden.
Wenn die Eigenschaft Workspace.SignalBehavior auf Enum.SignalBehavior.Deferred gesetzt ist, wird dieses Ereignis am nächsten Wiederaufnahmepunkt ausgelöst, der passieren wird, nachdem der Instance oder einer seiner Vorfahren mit Instance:Destroy() zerstört wurde.
Mit dem Deferred, ein Skript mit seinem eigenen Instance.Destroying zu verbinden, ist problematisch, da das Skript vor dem Aufruf des Rückrufs zerstört wird (was bedeutet, dass es nicht ausgeführt wird).
Wenn du ein Instance in Studio löschst, z. B. manuell durch den Explorer oder durch ein Plugin, wird das Instance nicht zerstört.Stattdessen wird der Elternteil auf nil festgelegt, die Sie mit Instance.AncestryChanged verfolgen können.
Code-Beispiele
This sample demonstrates how, when using Immediate signal behavior, an Instance being destroyed remains in place until the connected function yields.
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()
This sample demonstrates how, when using Deferred signal behavior, an Instance is destroyed before the signal fires.
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())
StyledPropertiesChanged
Dieses Ereignis wird immer dann ausgelöst, wenn eine Style-Eigenschaft auf der Instanz geändert wird, einschließlich dann, wenn eine Eigenschaft auf nil gesetzt wird.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local playerGui = player.PlayerGui
local HUDContainer = playerGui:WaitForChild("HUDContainer")
local meterBar = HUDContainer.MeterBar
local function stylePropertyChanged()
print("Styled properties changed")
end
meterBar:StyledPropertiesChanged():Connect(stylePropertyChanged)