Instance
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
L'istanza è la classe di base per tutte le classi nella gerarchia delle classi Roblox che possono essere parte del tree DataModel. Non è possibile creare direttamente oggetti di classe.
L'istanza ha una funzione speciale chiamata Instance.new() che viene utilizzata per creare oggetti tramite codice. Questa funzione prende il nome della classe come parametro e restituisce l'oggetto creato. Le classi e i serviziAbstracti non possono essere creati con la funzione istanza.new.
Sommario
Proprietà
Determina se un Instance e i suoi discendenti possono essere clonati usando Instance:Clone() , e possono essere salvati / pubblicati.
Il set di capacità consentite per essere utilizzate per gli script all'interno di questo container.
Un identificatore non unico della Instance .
Determina il padre gerarchico di Class.Instance .
Una proprietà obsoleta che proteggeva CoreGui oggetti.
Consente all'istanza di essere un Container Sandbox.
Metodi
Applica un tag all'esempio.
Questa funzione distrugge tutti i figli di un'esempio.
Crea una copia di un'istanza e tutti i suoi discendenti, ignorando le istanze che non sono Archivable .
Imposta la proprietà Instance.Parent su nil, blocca la ProprietàInstance.Parent e disconnette tutte le connessioni, e chiama Disconetti su tutti i figli.
Restituisce il primo antenato della Instance il cui Instance.Name è uguale al nome fornito.
Restituisce il primo antenato della Instance il cui Object.ClassName è uguale al nome dato.
Restituisce il primo antenato di Instance per il quale Object:IsA() restituisce vero per il nome dato.
Restituisce il primo figlio della Instance trovato con il nome fornito.
Restituisce il primo figlio della Instance il cui ClassName è uguale al nome dato.
Restituisce il primo figlio della Instance per il quale Object:IsA() restituisce vero per il nome dato.
Restituisce il primo discendente trovato con il Instance.Name .
Restituisce il Actor associato all'istanza, se applicabile.
Restituisce il valore che è stato assegnato al nome dell'attributo specificato.
Restituisce un evento che si attiva quando l'attributo specificato cambia.
Restituisce un dizionario degli attributi dell'esempio.
Restituisce un array che contiene tutti i figli dell'esempio.
Restituisce una stringa codificata dell'ID di debug utilizzata internamente da Roblox.
Restituisce un array che contiene tutti i discendenti dell'esempio.
Restituisce una stringa che descrive l'antenza dell'esempio.
Ottiene un array di tutti i tag applicati all'esempio.
Controlla se l'istanza ha un tag specificato.
Restituisce vero se un Instance è un antenato del DIscendentedato.
Restituisce vero se un Instance è un discendente dell'antenato dato.
Rimuove un tag dall'esempio.
Imposta l'attributo con il nome specificato al valore specificato.
Restituisce il figlio di Instance con il nome specificato. Se il figlio non esiste, restituirà il thread corrente fino a quando non lo farà.
Eventi
Si attiva quando la proprietà Instance.Parent dell'oggetto o uno dei suoi antenati viene modificata.
Si attiva ogni volta che un'attributo viene cambiato sulla Instance .
Si attiva dopo che un oggetto è parented a questo Instance .
Si attiva dopo che un bambino è stato rimosso da questo Instance .
Si attiva dopo che un discendente viene aggiunto al Instance .
Spara immediatamente prima che un discendente di Instance venga rimosso.
Spara immediatamente prima (o è rinviato fino a dopo) che l'istanza sia distrutta tramite Instance:Destroy() .
Proprietà
Archivable
Questa proprietà determina se l'istanza dovrebbe essere inclusa quando l'esperienza viene pubblicata o salvata, o quando Clone() è chiamato su uno degli antenati dell'esempio. Chiamare Clone() direttamente su un'istanza restituirà nil se
La copia di un oggetto in Studio utilizzando le opzioni Duplicate o Copy / Paste ignorerà la sua proprietà 1> Class.Instance.Archivable|Archivable1> e imposterà 4> Class.Instance.Archivable|Archivable4> su 7> true7> per la copia.
local part = Instance.new("Part")print(part:Clone()) --> Partpart.Archivable = falseprint(part:Clone()) --> nil
Capabilities
Il set di capacità consentite per essere utilizzate per gli script all'interno di questa esempio. Per rendere effettive le capacità, Instance.Sandboxed la proprietà deve essere abilitata.
Questa proprietà è utilizzata da una Proprietàsperimentale. Vedi la pagina Script Capilities per ulteriori dettagli.
Name
Un identificatore non unico della Instance .
Questa proprietà è un identificatore che descrive un oggetto. I nomi non sono necessariamente identificatori unici, tuttavia; i figli di un oggetto possono condividere lo stesso nome. I nomi vengono utilizzati per mantenere l'organizzazione della gerarchia dell'oggetto, insieme all'autorizzazione degli script ad accedere a oggetti specifici. Il nome di un'istanza non può essere superato da 100 caratteri.
Il nome di un oggetto viene spesso utilizzato per accedere all'oggetto attraverso la gerarchia del modello di dati utilizzando i seguenti metodi:
local baseplate = workspace.Baseplatelocal baseplate = workspace["Baseplate"]local baseplate = workspace:FindFirstChild("BasePlate")
Per rendere un oggetto accessibile utilizzando l'operatore punto, il nome di un oggetto deve seguire una certa sintassi. Il nome dell'oggetto deve iniziare con un punto o lettera. Il resto del nome può contenere solo lettere, numeri o trattini (non altri caratteri speciali). Se il nome dell'oggetto non segue questa sintassi non sarà accessibile utilizzando l'operatore punto e Lua non interpreterà il suo nome come un identificatore.
Se più di un oggetto con lo stesso nome sono fratelli allora qualsiasi tentativo di indice un oggetto con lo stesso nome restituirà l'unico tra gli oggetti trovati simile a Instance:FindFirstChild() , ma non sempre l'oggetto desiderato. Se un oggetto specifico deve essere accessato tramite il codice, è raccomandato dare a un nome unico, o garantire che nessuno dei suoi fratelli condivida lo stesso nome.
Nota, un nome completo che mostra la gerarchia dell'esempiopuò essere ottenuto utilizzando Instance:GetFullName() .
Parent
La proprietà Instance definisce il genitore gerarchico di Class.Instance . La seguente terminologia viene comunemente utilizzata quando si parla di come questa proprietà viene Impostare:
- Un oggetto è un figlio ( associato a ) un altro oggetto quando il suo padre è impostato su quel figlio.
- I discendenti di un Instance sono i figli di quell'oggetto, plus i figli dei figli anche.
- I antenati di un Instance sono tutti gli oggetti di cui l'istanza è discendente.
È da questa proprietà che molti altri membri dell'API ottengono il loro nome, come GetChildren e FindFirstChild .
La funzione Remove imposta questa proprietà su null. L'调用 di Destroy imposterà il Parent di un oggetto distrutto e tutti i suoi discendenti su Instance e anche 1>lock1> la ProprietàParent. Si verifica un errore quando si imposta il Parent di un oggetto distrutto.
Questa proprietà viene anche utilizzata per gestire se un oggetto esiste nel gioco o ha bisogno di essere rimosso. Fintanto che un oggetto padre è in the DataModel , viene memorizzato in una variabile, o è riferito da un'altra proprietà oggetto, allora l'oggetto rimane
I nuovi oggetti creati utilizzando Instance.new() non avranno un parent, e di solito non saranno visibili o funzionali fino a quando uno non è Impostare. La creazione più elementare di un oggetto ha due passaggi: la creazione dell'oggetto, quindi la impostazione del suo parent.
-- Create a part and parent it to the workspacelocal part = Instance.new("Part")part.Parent = workspace-- Instance new can also take Parent as a second parameterInstance.new("NumberValue", workspace)
Quando vengono apportate modifiche a certain properties while an instance is parented in the DataModel , the engine may need to perform extra work internally (for things like replication, rendering e GUI layout). Ogni volta che possibile, cambia le proprietà di un'esempioprima di averla impostata, invece di dopo averla impostata, per evitare di eseguire quel lavoro inutilmente.
Replicazione dell'oggetto
Un oggetto creato dal server non si replica ai client fino a quando non è parented a qualche oggetto che è replicato. Quando crea un oggetto allora impostando molte proprietà, è raccomandato di impostare Parent ultimo . Ciò garantisce che l'oggetto si replica una volta, invece di replicare molte modifiche delle proprietà.
local part = Instance.new("Part") -- Evita di utilizzare il secondo parametro quipart.Anchored = truepart.BrickColor = BrickColor.new("Really red")-- Potenzialmente molte altre modifiche alla proprietà potrebbero andare qui...-- Imposta sempre il padre l'ultimo!part.Parent = workspace
Tuttavia, se stavi parentando le tue parti a Model il cui padre non è ancora stato impostato, allora la parenting di ciascuna parte a quel modello è ok poiché il modello non avrebbe replicato ancora.
RobloxLocked
Questa proprietà usa per proteggere gli oggetti nel servizio CoreGui da essere modificati dagli utenti in modo non autorizzato. È stata deprecata e non fa nulla.
Sandboxed
Consente all'istanza di essere un Container Sandbox. I Container Sandbox sono una funzione sperimentale che limita le azioni che gli script all'interno di un particolare container possono eseguire.
Vedi la pagina Capabilità di script per ulteriori dettagli.
UniqueId
Metodi
AddTag
Questo metodo applica un tag all'esempio, con nessun effetto se il tag è già applicato. L'aggiunta di un tag avrà successo con successo con il tag fornito.
Nota che quando si etichetta un'istanza, è comune che alcune risorse siano utilizzate per dare la funzionalità del tag, ad esempio connessioni di eventi o tabelle. Per prevenire le perdite di memoria, è una buona idea pulire queste (disconetti, imposta su nil , ecc
Parametri
Restituzioni
ClearAllChildren
Questa funzione distrugge tutti i figli di un'esempio.
Come Instance:Destroy() chiama anche i figli di un oggetto su cui è utilizzato, questa funzione distruggerà tutti i discendenti.
Alternative a ClearAllChildren
Se lo sviluppatore non vuole distruggere tutti i discendenti, dovrebbe utilizzare Instance:GetChildren() o Instance:GetDescendants() per loop attraverso un oggetto e selezionare cosa distruggere. Ad esempio, il seguente esempio di codice distruggerà tutte le parti in un oggetto.
for _, instance in object:GetDescendants() doif instance:IsA("BasePart") theninstance:Destroy()endend
Restituzioni
Campioni di codice
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
Clone
Clone crea una copia di un'istanza e tutti i suoi discendenti, ignorando tutte le istanze che non sono Archivable . La copia della root instance è restituita da questo metodo e il
Se una proprietà di riferimento come ObjectValue.Value è impostata in un'esempioclonata, il valore della proprietà della copia dipende dal valore originale:
- Se una proprietà di riferimento si riferisce a un'istanza che è stata anche clonata, la copia si riferisce alla copia.
- Se una proprietà di riferimento si riferisce a un oggetto che non era non clonato, lo stesso valore viene mantenuto nella copia.
Restituzioni
Campioni di codice
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
Imposta la proprietà Instance.Parent su nulla, blocca la ProprietàInstance.Parent , disconnette tutte le connessioni e chiama Distruggi su tutti i figli. Questa funzione è il modo corretto per scartare gli oggetti che non sono più richiesti. La scartatura di oggetti non necessari è importante, poiché oggetti
Consiglio: Dopo aver chiamato Distruggi su un oggetto, imposta qualsiasi variabile che si riferisce all'oggetto (o ai suoi discendenti) su null. Ciò impedisce che il tuo codice acceda a qualcosa da fare con l'oggetto.
local part = Instance.new("Part")part.Name = "Hello, world"part:Destroy()-- Non fare questo:print(part.Name) --> "Hello, Mondo" (in inglese)-- Fai questo per evitare che la linea sopra non funzioni:part = nil
Una volta che un Instance è stato distrutto da questo metodo, non può essere riutilizzato poiché la proprietà Instance.Parent è bloccata. Per rimuovere temporaneamente un oggetto, imposta Parent invece. Ad esempio:
object.Parent = nilwait(2)object.Parent = workspace
Per distruggere un oggetto dopo un certo periodo di tempo, usa Debris:AddItem() .
Restituzioni
Campioni di codice
local part = script.Parent.Part
part:Destroy()
FindFirstAncestor
Restituisce il primo antenato della Instance il cui Instance.Name è uguale al nome fornito.
Questa funzione funziona in alto, il che significa che inizia all'esempioimmediata Instance.Parent e lavora verso il DataModel . Se non viene trovato alcun antenato corrispondente, restituisce null.
Il seguente codice snippet troverebbe l'antenato comune dell'oggetto chiamato "Car".
local car = object:FindFirstAncestor("Car")
For le varianti di questa funzione che trovano antenati di una classe specifica, vedi Instance:FindFirstAncestorOfClass() e Instance:FindFirstAncestorWhichIsA() .
Parametri
Il Instance.Name da cercare.
Restituzioni
FindFirstAncestorOfClass
Restituisce il primo antenato della Instance il cui Object.ClassName è uguale al nome dato.
Questa funzione funziona in alto, il che significa che inizia all'esempioimmediata Instance.Parent e lavora verso il DataModel . Se non viene trovato alcun antenato corrispondente, restituisce null.
Un uso comune di questa funzione è trovare il Model a cui appartiene. Ad esempio:
local model = part:FindFirstAncestorOfClass("Model")
Questa funzione è una variante di Instance:FindFirstAncestor() che controlla la proprietà Object.ClassName invece di Instance.Name . 1> Class.Instance:FindFirstAncestorWhichIsA()1> esiste anche, usando il metodo 4> Class.Object:IsA()
Parametri
Il Object.ClassName da cercare.
Restituzioni
FindFirstAncestorWhichIsA
Restituisce il primo antenato di Instance per il quale Object:IsA() restituisce vero per il nome dato.
Questa funzione funziona in alto, il che significa che inizia all'esempioimmediata Instance.Parent e lavora verso il DataModel . Se non viene trovato alcun antenato corrispondente, restituisce null.
A differenza di Instance:FindFirstAncestorOfClass() , questa funzione usa Object:IsA() che rispetta l'ereditarietà delle classi. Ad esempio:
print(part:IsA("Part")) --> trueprint(part:IsA("BasePart")) --> trueprint(part:IsA("Instance")) --> true
Pertanto, il seguente esempio di codice restituirà il primo antenato BasePart , indipendentemente dal fatto che sia un WedgePart , MeshPart o 2>Class.Part2> .
local part = object:FindFirstAncestorWhichIsA("BasePart")
Vedi anche, Instance:FindFirstAncestor() .
Parametri
Il Object.ClassName da cercare.
Restituzioni
FindFirstChild
Restituisce il primo figlio della Instance con il nome fornito,
or nil if no such child exists. If the optional recursive argument is true, this function搜索所有子子孫孫 rather than only the immediate children of the Instance .
Controllo dell'esistenza di un oggetto
FindFirstChild è necessario se si deve verificare l'esistenza di un oggetto prima di continuare. Cercare un figlio per nome usando l'operatore punto lancia un errore se il figlio non esiste.
-- I seguenti errori di riga se la parte non esiste nell'area di Area di lavoro:workspace.Part.Transparency = 0.5
Usa FindFirstChild per controllare prima la parte e poi usa un if-句 per eseguire il codice che ne ha bisogno.
local part = workspace:FindFirstChild("Part")if part thenpart.Transparency = 0.5end
Trovare un bambino il cui nome corrisponde a una proprietà
A volte l' Name di un oggetto è lo stesso di quello di una proprietà del suo Parent. Quando si utilizza l'operatore punto, le proprietà hanno la precedenza sui figli se condividono un nome.
Nell'esempio seguente, un Folder chiamato "Color" viene aggiunto a un Part , che ha anche la ProprietàPart.Color. 1>Class.Part.Color1> si riferisce al 4>Datatype.Color34>, non al Folder.
local part = Instance.new("Part")local folder = Instance.new("Folder")folder.Name = "Color"folder.Parent = partlocal c = part.Color --> Un Color3local c2 = part:FindFirstChild("Color") --> The Folder
Un vantaggio dell'utilizzo di FindFirstChild() in questo modo è che l'introduzione di nuove proprietà non impone un rischio nel tuo codice.
Nota di performance
FindFirstChild() richiede circa 20% di tempo in più rispetto all'uso del punto operatoro e quasi 8 volte più tempo in cui semplic
Parametri
Il Instance.Name da cercare.
Indipendentemente dal fatto che la ricerca debba essere eseguita in modo ricorsivo o meno.
Restituzioni
Campioni di codice
local found = workspace:FindFirstChild("Brick")
if found then
found.Name = "Foo"
end
FindFirstChildOfClass
Restituisce il primo figlio della Instance il cui ClassName è uguale al nome dato.
Se non viene trovato nessun figlio corrispondente, questa funzione restituisce nulla.
A differenza di Instance:FindFirstChildWhichIsA() questa funzione utilizza solo oggetti la cui classe corrisponde all'ID specificato, ignorando l'ereditarietà delle classi.
Gli sviluppatori che cercano un bambino per nome dovrebbero usare Instance:FindFirstChild() invece.
Parametri
Il Object.ClassName da cercare.
Restituzioni
Campioni di codice
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
Restituisce il primo figlio della Instance per il quale Object:IsA() restituisce vero per il nome dato.
Se non viene trovato nessun figlio corrispondente, questa funzione restituisce null. Se l'argomento recursivo opzionale è vero, questa funzione cerca tutti i discendenti piuttosto che solo i figli immediati della Instance .
A differenza di Instance:FindFirstChildOfClass() , questa funzione usa Object:IsA() che rispetta l'ereditarietà delle classi. Ad esempio:
print(part:IsA("Part")) --> veroprint(part:IsA("BasePart")) --> veroprint(part:IsA("Instance")) --> true
Pertanto, il seguente esempio di codice restituirà il primo figlio BasePart , indipendentemente dal fatto che sia un WedgePart , MeshPart o 1> Class.Part1> .
local part = object:FindFirstChildWhichIsA("BasePart")
Gli sviluppatori che cercano un bambino per nome dovrebbero usare invece Instance:FindFirstChild() .
Parametri
Il Object.ClassName per essere cercato.
Indipendentemente dal fatto che la ricerca debba essere eseguita in modo ricorsivo o meno.
Restituzioni
FindFirstDescendant
Restituisce il primo discendente trovato con il Instance.Name .
Questo metodo è disabilitato e non può essere utilizzato. Per trovare il primo discendente di un'esempio, considera l'uso del parametro recursive su Instance:FindFirstChild() invece.
Parametri
Il Instance.Name per cui si cerca.
Restituzioni
GetActor
Se il Instance è un Actor , il Actor stesso viene restituito. Altrimenti, il suo antenato più vicino 1>Class.Actor1> viene restituito. Se nessun antenato è un 4>Class.Actor4>, il risultato è 7>nil7> .
Restituzioni
GetAttribute
Questo metodo restituisce il valore che è stato assegnato al nome dell'attributo specificato. Se nessun attributo è stato assegnato, nil è restituito.
Ad esempio, il seguente codice snippet imposta e poi ottiene il valore dell'attributo PositionIniziale dell'istanza:
local part = workspace.Partpart:SetAttribute("InitialPosition", part.Position)local initialPosition = instance:GetAttribute("InitialPosition")print(initialPosition)
Vedi anche
- Instance:SetAttribute() che imposta l'attributo con il nome specificato al valore specificato.
- Instance:GetAttributes() che restituisce un dizionario di coppie di valore per ciascuno degli attributi dell'esempio.
Parametri
Il nome dell'attributo che viene recuperato.
Restituzioni
Il valore che è stato assegnato al nome dell'attributo specificato. Se nessun nome dell'attributo è stato assegnato, nil è restituito.
GetAttributeChangedSignal
Questa funzione restituisce un evento che si comporta esattamente come l'evento Changed , ad eccezione del fatto che si attiva solo quando l'attributo specificato cambia; in effetti è simile a GetPropertyChangedSignal() ma per gli attributi.
In generale, è una buona idea utilizzare questo metodo invece di una connessione a Changed con una funzione che controlla il nome dell'attributo. Le chiamate successive a questa funzione sullo stesso oggetto con lo stesso nome dell'attributo restituiscono lo stesso evento.
L'esempio di codice seguente restituisce un segnale che attiva la funzione attributeChanged() quando la parte cambia la posizione iniziale:
local part = workspace.Part
part:SetAttribute("InitialPosition", part.Position)
local function attributeChanged()
print("Attribute changed")
end
part:GetAttributeChangedSignal("InitialPosition"):Connect(attributeChanged)
Vedi anche Instance.AttributeChanged che si attiva ogni volta che viene cambiato qualsiasi attributo sull'esempio.
Parametri
Il nome dell'attributo specificato per cui il segnale di cambiamento viene restituito.
Restituzioni
Un evento che si attiva quando l'attributo specificato cambia.
GetAttributes
Questo metodo restituisce un dizionario di coppie chiave-valore per ciascuna proprietà in cui la chiave è il nome della proprietà e il valore è un non- nil valore.
Ad esempio, il seguente codice snippet produce gli attributi e i valori di un'istanza:
local part = workspace.Partpart:SetAttribute("InitialPosition", part.Position)part:SetAttribute("CanUse", true)for name, value in part:GetAttributes() doprint(name .. " = " .. value)end
Vedi anche Instance:GetAttribute() che restituisce il valore che è stato assegnato al nome dell'attributo specificato.
Restituzioni
Un dizionario di paia di stringa → variante per ciascuna proprietà in cui la stringa è il nome della proprietà e la variabile è un valore non null.
GetChildren
Restituisce un array (una tabella in cui sono direttamente figli di ogni esempio, o ogni Instance cui il suo Parent è uguale all'oggetto. L' array può essere ripetuto utilizzando sia un numero generico che un for- loop generico:
-- Esempio di for-loop numericolocal children = workspace:GetChildren()for i = 1, #children dolocal child = children[i]print(child.Name .. " is child number " .. i)end
-- Esempio generico per-looplocal children = workspace:GetChildren()for i, child in children doprint(child.Name .. " is child number " .. i)end
I bambini sono ordinati per l'ordine in cui la loro proprietà Parent è stata impostata sull'oggetto.
Vedi anche la funzione GetDescendants .
Restituzioni
Un array che contiene i figli dell'esempio.
Campioni di codice
local children = workspace:GetChildren()
for i = 1, #children do
print(i, children[i].Name)
end
GetDebugId
Restituisce una stringa codificata dell'ID di debug utilizzata internamente da Roblox.
Nota:
- Questo oggetto è protetto. Tentando di utilizzarlo in un Script o in un LocalScript causerà un errore
- Un ID di debug è un ID utilizzato nei processi di debug. Consente a un debugger di leggere ogni istruzione prima che un'applicazione la elabori. Tutti gli oggetti in Roblox agiscono come processi e ogni istruzione di esecuzione (o 'codice') che può essere debuggata se necessario
- Questo può essere utile per i plugin che devono distinguere oggetti simili l'uno dall'altro (come gli oggetti che condividono lo stesso nome)
Parametri
La lunghezza della scala.
Restituzioni
L'ID della Stringadi debug.
Campioni di codice
print(workspace:GetDebugId()) --> 39FA_12
print(workspace:GetDebugId(10)) --> 39FA2FEF4D_12
print(workspace:GetDebugId(math.huge)) --> 12
GetDescendants
Questo metodo oggetto restituisce un array che contiene tutti i discendenti di quell'oggetto. A differenza di Instance:GetChildren() , che restituisce solo i figli immediati di un oggetto, questo metodo trova ogni figlio dell'oggetto, ogni figlio di questi figli e così via.
Restituzioni
Un array che contiene i discendenti dell'esempio.
Campioni di codice
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
Restituisce una stringa che descrive l'antenza dell'istanza. La stringa è una concatenazione dei Name dell'oggetto e dei suoi antenati, separati da periodi. Il DataModel ( game ) non è considerato. Ad esempio, un
Quando viene chiamato su un Instance che non è un discendente del DataModel, questa funzione considera tutti gli antenati fino al top senza un Parent .
Questa funzione è utile per il debug e il logging. Non dovresti tentare di analizzare la stringa restituita per qualsiasi operazione utile; questa funzione non escapa periodi (o altri simboli) nei nomi degli oggetti. In altre parole, anche se la sua uscita sembra essere un identificatore Lua valido, non è garantito.
Restituzioni
Campioni di codice
-- 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
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
GetTags
Questo metodo restituisce un array di etichette applicate all'esempiospecificata, come stringhe. Puoi aggiungere etichette sia in Studio nella finestra Proprietà o in tempo esecuzione con AddTag() .
Questo metodo è utile quando vuoi fare qualcosa con più tag su un'istanza alla volta. Tuttavia, è inefficace utilizzare questo metodo per controllare l'esistenza di un singolo tag; invece, usa HasTag() per controllare un tag specifico.
Restituzioni
HasTag
Questo metodo restituisce true se il tag fornito è stato aggiunto all'oggetto. Puoi aggiungere tag sia in Studio nella finestra Proprietà o in tempo esecuzione con AddTag() .
Parametri
Restituzioni
IsAncestorOf
Restituisce vero se un Instance è un antenato del DIscendentedato.
Un Instance è considerato l'antenato di un oggetto se il suo Instance.Parent o uno dei suoi parenti Instance.Parent è impostato sul 2>Class.Instance2> .
Vedi anche, Instance:IsDescendantOf() .
Parametri
Restituzioni
Campioni di codice
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
Restituisce vero se un Instance è un discendente dell'antenato dato.
Un Instance è considerato il discendente di un oggetto se il padre dell'esempioo uno dei suoi parentè impostato sull'oggetto.
Nota, DataModel è un discendente di zero. Ciò significa che IsDescendantOf non può essere utilizzato con un parametro di zero per controllare se un oggetto è stato rimosso.
Vedi anche, Instance:IsAncestorOf() .
Parametri
Restituzioni
Campioni di codice
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
Questo metodo rimuove un tag da un'esempio. Non mostrerà un errore se l'oggetto non ha il tag. Il successo rimozione di un tag creerà un segnale creato da CollectionService:GetInstanceRemovedSignal() con il tag specificato.
Nota che quando si etichetta un'istanza, è comune che alcune risorse siano utilizzate per dare la funzionalità del tag, ad esempio connessioni di eventi o tabelle. Per prevenire le perdite di memoria, è una buona idea pulire queste (disconetti, imposta su nil , ecc.) quando non sono più necessarie per un tag.
Parametri
Restituzioni
SetAttribute
Questo metodo imposta l'attributo con il nome specificato al valore specificato. Se il valore specificato è nil, l'attributo verrà rimosso, poiché nil viene restituito per impostazione predefinita.
Ad esempio, il seguente codice snippet imposta l'attributo Position iniziale dell'istanza a Vector3.new(0, 10, 0) :
local part = workspace.Partpart:SetAttribute("InitialPosition", Vector3.new(0, 10, 0))
Limitazioni
Requisiti e restrizioni di nome:
- I nomi devono utilizzare solo caratteri alfanumerici e trattino.
- Non sono consentiti spazi o simboli unici.
- Le stringhe devono essere di 100 caratteri o meno.
- I nomi non sono consentiti a iniziare con RBX a meno che il mittente non sia uno script del core Roblox (riservato per Roblox).
Quando si tenta di impostare un attributo a un inserisci / scrivinon supportato, viene visualizzato un errore.
Vedi anche:
- Instance:GetAttribute() che restituisce il valore che è stato assegnato al nome dell'attributo specificato.
- Instance:GetAttributes() che restituisce un dizionario di coppie di valore per ciascuno degli attributi dell'esempio.
Parametri
Il nome dell'attributo Impostare.
Il valore per impostare l'attributo specificato.
Restituzioni
WaitForChild
Restituisce il figlio di Class.Instance con il nome specificato. Se il figlio non esiste, restituirà il thread corrente fino a quando non lo farà. Se il parametro timeOut è specificato, questo metodo terminerà dopo il numero specificato di secondi e restituirà nil .
Uso primario
WaitForChild() è estremamente importante quando si lavora sui codici in esecuzione dal client in un LocalScript . Il motore Roblox non garantisce il tempo o l'ordine in cui gli
Note
- Questa funzione non si genera se un bambino con il nome fornito esiste quando viene fatto l'appello.
- Instance:FindFirstChild() è un'alternativa più efficiente a WaitForChild() per gli oggetti che sono presi in considerazione.
- Se un chiamata a questo metodo supera 5 secondi senza restituire, e nessun timeOut parametro è stato specificato, un avviso verrà stampato per l'uscita che il thread potrebbe produrre indefinitamente.
Parametri
Il Instance.Name da cercare.
Un parametro di scadenza opzionale.
Restituzioni
Campioni di codice
local part = workspace:WaitForChild("Part")
print(part.Name .. " has been added to the Workspace")
Eventi
AncestryChanged
Si attiva quando la proprietà Instance.Parent dell'oggetto o uno dei suoi antenati viene modificata.
Questo evento include due parametri, child e parent. Child si riferisce al 2> Class.Instance2> il cui 5> Class.Instance.Parent5> è stato in realtà cambiato. 8>Parent8> si riferisce al nuovo 1> Class.Instance.Parent1> di questa esempio.
Puoi utilizzare questo evento per tracciare la distruzione di un'istanza in Studio, come la distruzione manuale nell'Explorer o attraverso un Collegare. Se hai bisogno di rilevare quando un'istanza viene distrutta utilizzando Instance:Destroy() , usa l'evento Instance.Destroying invece.
Parametri
Il Instance il cui Instance.Parent è stato cambiato.
Il nuovo Instance.Parent di Class.Instance il cui Instance è stato cambiato.
Campioni di codice
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
Questo evento si attiva ogni volta che qualsiasi attributo viene cambiato sull'esempio, tra cui quando un attributo viene impostato su nil . Il nome dell'attributo cambiato viene passato alla funzione connessa.
Ad esempio, il seguente codice snippet connette la funzione attributeChanged() per essere eseguita ogni volta che uno degli attributi della parte cambia:
local part = workspace.Part
local function attributeChanged(attributeName)
print(attributeName, "changed")
end
part.AttributeChanged:Connect(attributeChanged)
Vedi anche Instance:GetAttributeChangedSignal() che restituisce un evento che si attiva quando un determinato attributo specificato cambia.
Parametri
Il nome dell'attributo che è stato cambiato.
ChildAdded
Si attiva dopo che un oggetto è parented a questo Instance .
Nota, quando si utilizza questa funzione su un client per rilevare gli oggetti creati dal server, è necessario utilizzare Instance:WaitForChild() quando si indizza questi discendenti. Questo perché l'oggetto e i suoi discendenti non sono garantiti di replicarsi dal server al client contemporaneamente. Ad esempio:
workspace.ChildAdded:Connect(function(child)
-- need to use WaitForChild as descendants may not have replicated yet
local head = child:WaitForChild("Head")
end)
Nota, questa funzione funziona solo per i figli immediati della Instance . Per una funzione che cattura tutti i discendenti, usa Instance.DescendantAdded .
Vedi anche, Instance.ChildRemoved .
Parametri
Campioni di codice
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
Si attiva dopo che un bambino è stato rimosso da questo Instance .
Remove fa riferimento a quando il genitore di un oggetto viene cambiato da questo Instance a qualcosa di diverso da questo Instance . Nota, questo evento si attiva anche quando un figlio viene distrutto (utilizzando Instance:Destroy() ) come la funzione di distruzione imposta un genitore di un oggetto a zero.
Questa funzione funziona solo per i figli immediati della Instance . Per una funzione che cattura tutti i discendenti, usa Instance.DescendantRemoving .
Vedi anche Instance.ChildAdded .
Parametri
Campioni di codice
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
L'evento DescendantAdded viene attivato dopo che un discendente viene aggiunto al Instance .
Come descendantAdded fires for every DIscendente, parenting an object to the Instance will fire the event for this object and all of its descendants individually.
Gli sviluppatori interessati solo ai figli immediati di Instance dovrebbero usare invece Instance.ChildAdded .
Vedi anche Instance.DescendantRemoving .
Parametri
Campioni di codice
local function onDescendantAdded(descendant)
print(descendant)
end
workspace.DescendantAdded:Connect(onDescendantAdded)
local part = Instance.new("Part")
part.Parent = workspace
DescendantRemoving
Questo evento fa in modo che immediatamente prima che il genitore Instance cambiamenti in modo che una descente istanza non sia più un'esempioDIscendente. 1> Class.Instance:Destroy()|Destroy()1> cambia il genitore di 4> Class.Instance.Parent|Parent</
Poiché questo evento si attiva prima della rimozione del DIscendente, il padre del discendente non sarà cambiato al momento di questo evento di rimozione. Se il discendente è anche un figlio diretto del parent, questo evento si attiverà prima di Class.Instance.ChildRemoved .
Se un discendente ha figli, questo evento si attiva con il discendente prima, seguito dai suoi discendenti.
Avviso
Questo evento si attiva con l'oggetto discendente che viene rimosso. Cercare di impostare il Parent del discendente a qualcosa di diverso fallirà. Ecco un esempio che mostra questo:
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
Vedi anche DescendantAdded .
Parametri
Campioni di codice
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
Il Instance non verrà mai eliminato dalla memoria mentre una funzione connessa lo sta ancora utilizzando. Tuttavia, se la funzione viene generata in qualsiasi punto, la funzione discendente e i suoi discendenti saranno affidati a Instance .
Se la proprietà Workspace.SignalBehavior è impostata su Enum.SignalBehavior.Immediate, questo evento si attiva immediatamente prima che la Instance o uno dei suoi antenati venga distrutto con 1> Class.Instance:Destroy()1> .
Se la proprietà Workspace.SignalBehavior è impostata su Enum.SignalBehavior.Deferred, questo evento si attiva al punto di ripresa successivo, che sarà dopo la distruzione di uno dei suoi antenati con Instance .
Con il comportamento Deferred, la connessione di uno script al suo evento Instance.Destroying è problematica, poiché lo script verrà distrutto prima che il richiamo possa essere chiamato (il che significa che non sarà eseguito).
Quando si elimina un Instance in Studio, come la cancellazione manuale attraverso Explorer o attraverso un Collegare, la Instance non viene distrutta. Invece, il padre è impostato su 1> nil1> che si può tracciare con 4> Class.Instance.AncestryChanged4> .
Campioni di codice
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()
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())