Instance
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Instance è la classe base per tutte le classi nella gerarchia di classe Roblox che possono essere parte dell'albero DataModel.
Non è possibile creare direttamente oggetti root Instance , ma il costruttore speciale Instance.new() crea oggetti tramite codice, prendendo il nome della classe come parametro e restituendo l'oggetto creato.
Sommario
Proprietà
Determina se un Instance e i suoi discendenti possono essere clonati utilizzando Instance:Clone() e possono essere salvati/pubblicati.
Il set di capacità consentito di essere utilizzato per gli script all'interno di questo container.
Un identificatore non univoco del Instance .
Determina il genitore gerarchico del Instance .
Una proprietà deprecata che proteggeva gli oggetti CoreGui .
Trasforma l'istanza in un container sandbox.
Un identificatore univoco per l'esempio.
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 a nil, blocca la ProprietàInstance.Parent, disconnette tutte le connessioni e chiama Destroy() su tutti i figli.
Restituisce il primo antenato del Instance il cui Instance.Name è uguale al nome dato.
Restituisce il primo antenato del Instance il cui Object.ClassName è uguale alla classe data.
Restituisce il primo antenato del Instance per il quale Object:IsA() restituisce vero per la classe data.
Restituisce il primo figlio del Instance trovato con il nome dato.
Restituisce il primo figlio del Instance il cui ClassName è uguale al nome di classe dato.
Restituisce il primo figlio del Instance per il quale Object:IsA() restituisce vero per la classe data.
Restituisce il primo discendente trovato con il dato Instance.Name .
Restituisce il Actor associato all'istanza, se presente.
Restituisce il valore che è stato assegnato al nome dell'attributo dato.
Restituisce un evento che si attiva quando viene modificato l'attributo specificato.
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 utilizzato internamente da Roblox.
Restituisce un array che contiene tutti i discendenti dell'esempio.
Restituisce una stringa che descrive l'ascendenza dell'esempio.
Ottiene un array di tutti i tag applicati all'esempio.
Verifica se l'istanza abbia un tag dato.
Restituisce vero se un Instance è un antenato del DIscendentedato.
Restituisce true se un Instance è un discendente dell'antenato dato.
Restituisce true se il valore memorizzato nella proprietà specificata non è predefinito.
Rimuove un tag dall'esempio.
Imposta l'attributo con il nome specificato al valore specificato.
Restituisce il figlio del Instance con il nome fornito. Se il figlio non esiste, produrrà il thread attuale fino a quando non lo fa.
Eventi
Si accende quando la proprietà Instance.Parent della proprietà dell'oggetto o di uno dei suoi antenati viene modificata.
Si attiva ogni volta che un attributo viene modificato sul Instance.
Fuochi dopo che un oggetto è stato parented a questo Instance .
Incendi dopo che un bambino viene rimosso da questo Instance .
Fuochi dopo che un discendente viene aggiunto al Instance .
Fuochi immediatamente prima che venga rimosso un discendente del Instance viene rimosso.
Fuochi immediatamente prima (o viene rimandato fino a dopo) che l'istanza viene distrutta via Instance:Destroy() .
Proprietà
Archivable
Questa proprietà determina se l'istanza debba essere inclusa quando l'esperienza viene pubblicata o salvata, o quando Clone() viene chiamata su uno degli antenati dell'esempio.Chiamare direttamente su un'istanza restituirà se quell'istanza non è non .
Copiare un oggetto in Studio utilizzando le opzioni Duplica o Copia / Incolla ignorerà la sua proprietà e imposterà per la copia.
local part = Instance.new("Part")print(part:Clone()) --> Partpart.Archivable = falseprint(part:Clone()) --> nil
Capabilities
Il set di capacità consentito di essere utilizzato per gli script all'interno di questa esempio.Perché le capacità abbiano effetto, la proprietà Instance.Sandboxed deve essere abilitata.
Questa proprietà viene utilizzata da una Proprietàsperimentale. Vedi capacità di script per ulteriori dettagli.
Name
Un identificatore non univoco del Instance .I nomi vengono utilizzati per mantenere l'architettura dell'oggetto organizzata, oltre a consentire agli script di accedere a oggetti specifici.Il nome di un'istanza non può superare 100 caratteri in dimensioni.
Il nome di un oggetto viene spesso utilizzato per accedere all'oggetto attraverso la gerarchia del modello di dati utilizzando i seguenti metodi:
local Workspace = game:GetService("Workspace")local baseplate = Workspace.Baseplatelocal baseplate = Workspace["Baseplate"]local baseplate = Workspace:FindFirstChild("BasePlate")
Per rendere un oggetto accessibile utilizzando l'operatore punto ( . ), il suo nome deve iniziare con un trattino o una lettera, e il resto del nome può contenere solo lettere, numeri o trattini (nessun altro carattere speciale).Se il nome di un oggetto non segue questa sintassi, non sarà accessibile utilizzando l'operatore punto e Luau non interpreterà il suo nome come identificatore.
Se più di un oggetto con lo stesso nome sono fratelli, qualsiasi tentativo di indicizzare un oggetto con quel nome restituirà solo uno degli oggetti, simile a Instance:FindFirstChild() , ma non sempre l'oggetto desiderato.Se un oggetto specifico deve essere accessato attraverso il codice, è consigliato dare un nome univoco o garantire che nessuno dei suoi fratelli condivida lo stesso nome.
Vedi anche Instance:GetFullName() per ottenere un nome completo che include la gerarchia dell'oggetto.
Parent
La proprietà Parent determina il genitore gerarchico del Instance .La seguente terminologia è comunemente utilizzata quando si parla di come questa proprietà è Impostare:
Un oggetto è un figlio di, o è genitorato a , un altro oggetto quando il suo Parent è impostato su quell'oggetto.
I discendenti di un sono i figli di quell'oggetto, più i discendenti dei figli anche.
Gli antenati di un Instance sono tutti gli oggetti ai quali l'istanza è un discendente.
È dalla proprietà Parent che molti altri membri dell'API ottengono il loro nome, come GetChildren() e FindFirstChild().Questa proprietà viene anche utilizzata per gestire se un oggetto esista nell'esperienza o debba essere rimosso.Fintanto che il genitore di un oggetto è nel DataModel , viene memorizzato in una variabile, o viene fatto riferimento alla Proprietàdi un altro oggetto, l'oggetto rimane nell'esperienza; altrimenti, l'oggetto verrà rimosso automaticamente.
Chiamare imposterà il di un e tutti i suoi discendenti a , e anche bloccherà la Proprietà>.Si verifica un errore quando si imposta il Parent di un oggetto distrutto.
Gli oggetti appena creati utilizzando Instance.new() non avranno un parente di solito non saranno visibili o funzioneranno fino a quando non viene Impostareuno.
Replicazione di oggetti
Un oggetto creato dal server non si replica ai client fino a quando non viene associato a un oggetto che viene replicato.Quando si crea un oggetto e si impostano molte proprietà, si consiglia di impostare la proprietà Parent di last .Questo garantisce che l'oggetto si replica una volta, invece di replicare molte modifiche di proprietà.
local Workspace = game:GetService("Workspace")-- Imposta l'ultimo genitore dell'esempionuova (raccomandato)local part = Instance.new("Part")part.Position = Vector3.new(0, 10, 0)part.Parent = Workspace
Tuttavia, se le parti di genitorialità vengono inviate a un Model il cui genitore non è ancora stato impostato, genitorializzare ciascuna parte a quel modello è accettabile poiché il modello non sarebbe stato replicato.
RobloxLocked
Questa proprietà era utilizzata per proteggere gli oggetti nel servizio CoreGui dal essere modificati dagli utenti in modo non autorizzato.È stato deprecato e non fa nulla.
Sandboxed
Trasforma l'istanza in un container sandboxato , una funzione sperimentale che limita le azioni che gli script all'interno di un particolare contenitore possono eseguire.Vedi capacità di script per ulteriori dettagli.
UniqueId
Un identificatore univoco per l'esempio, distinto da Instance.Name che non è necessariamente unico.
Metodi
AddTag
Questo metodo applica un tag all'esempio, senza alcun effetto se il tag è già applicato.L'aggiunta di un tag con successo attiverà un segnale creato da CollectionService:GetInstanceAddedSignal() con il tag specificato.
Avvertimenti
I tag di un'istanza aggiunti sul lato client verranno eliminati se il server aggiunge o rimuove un tag su quell'istanza in seguito perché il server replica tutti i tag insieme e sovrascrive i tag precedenti.
Quando si etichette un'istanza, è comune che alcune risorse vengano utilizzate per dare al tag la sua funzionalità, ad esempio connessioni event o tabelle.Per prevenire perdite di memoria, è una buona idea pulirle (disconnetti, imposta su nil , ecc.) quando non sono più necessarie per un tag.Fai questo quando chiami Instance:RemoveTag() , chiami Instance:Destroy() , o in una funzione connessa a un segnale restituito da CollectionService:GetInstanceRemovedSignal() .
Parametri
Restituzioni
ClearAllChildren
Questa funzione distrugge tutti i figli e i discendenti di un'esempio.
Se non desideri distruggere tutti i figli e i discendenti, usa Instance:GetChildren() o Instance:GetDescendants() per passare attraverso quei figli/discendenti e selezionare ciò che distruggere.Ad esempio, il seguente esempio di codice distruggerà tutti BaseParts discendenti da un Model :
local Workspace = game:GetService("Workspace")local model = Workspace:FindFirstChild("TestModel")for _, descendant in model:GetDescendants() doif descendant:IsA("BasePart") thendescendant:Destroy()endend
Restituzioni
Campioni di codice
This example creates a Part and adds a few sparkle objects to the part. Then it calls Part:ClearAllChildren() to remove all of the children.
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 dell'istanza root viene restituita da questo metodo e il suo Parent è impostato su nil .Nota che se l'istanza stessa ha Archivable impostata su false , questa funzione restituirà nil .
Se una proprietà di riferimento come ObjectValue.Value viene impostata in un'esempioclonata, il valore della proprietà della copia dipende dal valore dell'originale:
- Se una proprietà di riferimento si riferisce a un'istanza che era anche clonata, la copia si riferirà alla copia.
- Se una proprietà di riferimento si riferisce a un oggetto che non è stato clonato , lo stesso valore viene mantenuto nella copia.
Restituzioni
Campioni di codice
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
Imposta la proprietà Instance.Parent a nil, blocca la ProprietàInstance.Parent, disconnette tutte le connessioni e chiama Destroy() su tutti i figli.Questa funzione è il modo corretto di disfarsi di oggetti che non sono più necessari.
Lo smaltimento di oggetti non necessari è importante, poiché gli oggetti e le connessioni non necessari in un luogo utilizzano memoria che può portare a gravi problemi di prestazioni nel tempo.
Come migliore pratica dopo aver chiamato Destroy() su un oggetto, imposta qualsiasi variabile che fa riferimento all'oggetto (o ai suoi discendenti) a nil .Questo impedisce al tuo codice di accedere a qualcosa che abbia a che fare con l'oggetto.
local part = Instance.new("Part")part.Name = "Hello, world"part:Destroy()-- Non farlo:print(part.Name) --> "Ciao, Mondo"-- Fai questo per impedire che la linea sopra funzioni:part = nil
Una volta che un Instance è stato distrutto da questo metodo, non può essere riutilizzato perché la proprietà Instance.Parent è bloccata.Per temporaneamente rimuovere un oggetto invece di distruggerlo, imposta Parent a nil .Ad esempio:
local Workspace = game:GetService("Workspace")object.Parent = niltask.wait(2)object.Parent = Workspace
Per distruggere un oggetto dopo un certo periodo di tempo, usa Debris:AddItem() .
Restituzioni
Campioni di codice
Demonstrates destroying a Part using the Instance:Destroy() function.
This function is the correct way to dispose of objects that are no longer required.
local part = script.Parent.Part
part:Destroy()
FindFirstAncestor
Restituisce il primo antenato del Instance il cui Instance.Name è uguale al nome dato.
Questa funzione lavora verso l'alto, cioè inizia all'immediato Instance.Parent dell'esempioe lavora verso il DataModel .Se non viene trovato alcun antenato corrispondente, restituisce nil .
Il seguente snippet di codice troverebbe il primo antenato dell'oggetto chiamato Car .
local car = object:FindFirstAncestor("Car")
Per 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 del Instance il cui Object.ClassName è uguale alla classe data.
Questa funzione lavora verso l'alto, cioè inizia all'immediato Instance.Parent dell'esempioe lavora verso il DataModel .Se non viene trovato alcun antenato corrispondente, restituisce nil .
Un uso comune di questa funzione è trovare il Model a BasePart appartiene. Ad esempio:
local model = part:FindFirstAncestorOfClass("Model")
Questa funzione è una variante di Instance:FindFirstAncestor() che controlla la proprietà Object.ClassName piuttosto che Instance.Name.Instance:FindFirstAncestorWhichIsA() anche esiste, usando il metodo Object:IsA() invece di rispettare l'ereditarietà di classe.
Parametri
Il Object.ClassName da cercare.
Restituzioni
FindFirstAncestorWhichIsA
Restituisce il primo antenato del Instance per il quale Object:IsA() restituisce vero per la classe data.
Questa funzione lavora verso l'alto, cioè inizia all'immediato Instance.Parent dell'esempioe lavora verso il DataModel .Se non viene trovato alcun antenato corrispondente, restituisce nil .
A differenza di Instance:FindFirstAncestorOfClass() , questa funzione utilizza Object:IsA() che rispetta l'ereditarietà di classe. 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 Part.
local part = object:FindFirstAncestorWhichIsA("BasePart")
Vedi anche Instance:FindFirstAncestor() .
Parametri
Il Object.ClassName da cercare.
Restituzioni
FindFirstChild
Restituisce il primo figlio del Instance con il nome fornito, o nil se non esiste un tale figlio.Se l'argomento opzionale recursive è true, questa funzione cerca tutti i discendenti piuttosto che solo i figli immediati del Instance .
Controllo dell'esistenza di un oggetto
FindFirstChild() è necessario se devi verificare che un oggetto esista prima di continuare.L'attempto di indicizzare un figlio per nome utilizzando l'operatore punto lancia un errore se il figlio non esiste.
local Workspace = game:GetService("Workspace")-- Gli errori di linea seguenti se la parte non esiste nell'area di lavoroWorkspace.Part.Transparency = 0.5
Usa FindFirstChild() per controllare prima Part , quindi usa una dichiarazione if per eseguire il codice che ne ha bisogno.
local Workspace = game:GetService("Workspace")local part = Workspace:FindFirstChild("Part")if part thenpart.Transparency = 0.5end
Trovare un bambino il cui nome corrisponde a una proprietà
A volte il 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 "Colore" viene aggiunto a un Part , che ha anche la ProprietàPart.Color.Part.Color si riferisce al Color3 , non alla Cartella.
local part = Instance.new("Part")local folder = Instance.new("Folder")folder.Name = "Color"folder.Parent = partlocal c = part.Color --> Un Colore3local 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 sul tuo codice.
Note sulla prestazione
FindFirstChild() richiede circa il 20% in più rispetto all'uso dell'operatore punto e quasi 8 volte più a lungo rispetto a semplicemente memorizzare un riferimento a un oggetto.Pertanto, dovresti evitare di chiamarlo in codice dipendente dalla performance come in loop stretti o funzioni connesse a RunService.Heartbeat e RunService.PreRender .Invece, memorizza il risultato in una variabile, o considera l'uso di ChildAdded o WaitForChild() per rilevare quando un figlio di un nome dato diventa disponibile.
Parametri
Il Instance.Name da cercare.
Se la ricerca debba essere eseguita ricorsivamente o meno.
Restituzioni
Campioni di codice
The below would look in Workspace for an object name "Brick". If found, it will change the name of the object to "Foo".
local found = workspace:FindFirstChild("Brick")
if found then
found.Name = "Foo"
end
FindFirstChildOfClass
Restituisce il primo figlio del Instance il cui ClassName è uguale al dato className .A differenza di Instance:FindFirstChildWhichIsA() , questa funzione restituisce solo oggetti la cui classe corrisponde a className , ignorando l'ereditarietà di classe.Se non viene trovato alcun figlio corrispondente, questa funzione restituisce nil .
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 del Instance per il quale Object:IsA() restituisce vero per la classe data.
Se non viene trovato alcun figlio corrispondente, questa funzione restituisce nil .Se l'argomento ricorsivo opzionale è vero, questa funzione cerca tutti i discendenti piuttosto che solo i figli immediati del Instance .
A differenza di Instance:FindFirstChildOfClass() , questa funzione utilizza Object:IsA() che rispetta l'ereditarietà di classe. Ad esempio:
print(part:IsA("Part")) --> veroprint(part:IsA("BasePart")) --> veroprint(part:IsA("Instance")) --> true
Pertanto, il seguente esempio di codice restituirà il primo BasePart figlio, indipendentemente dal fatto che sia un WedgePart , MeshPart o Part .
local part = object:FindFirstChildWhichIsA("BasePart")
Gli sviluppatori che cercano un bambino per nome dovrebbero usare Instance:FindFirstChild() invece.
Parametri
Il Object.ClassName da cercare.
Se la ricerca debba essere eseguita ricorsivamente o meno.
Restituzioni
FindFirstDescendant
Restituisce il primo discendente trovato con il dato Instance.Name .
Questo metodo è disabilitato e non può essere utilizzato.Per trovare il primo discendente di un'esempio, considera di utilizzare il parametro recursive su Instance:FindFirstChild() invece.
Parametri
Il Instance.Name per cercare.
Restituzioni
GetActor
Se il Instance è un Actor , il Actor stesso viene restituito.Altrimenti, il suo antenato più vicino Actor viene restituito.Se nessun antenato è un Actor , il risultato è nil .
Restituzioni
GetAttribute
Questo metodo restituisce il valore che è stato assegnato al nome dell'attributo dato. Se non è stato assegnato alcun attributo, nil viene restituito.
Ad esempio, il seguente snippet di codice imposta e poi ottiene il valore dell'attributo InitialPosition dell'istanza:
local Workspace = game:GetService("Workspace")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 chiave-valore per ciascuno degli attributi dell'esempio.
Parametri
Il nome dell'attributo recuperato.
Restituzioni
Il valore che è stato assegnato al nome dell'attributo specificato. Se non è stato assegnato alcun attributo, nil viene restituito.
GetAttributeChangedSignal
Questa funzione restituisce un evento che si comporta esattamente come l'evento Changed , ad eccezione che si attiva solo quando viene modificato l'attributo specificato; effettivamente è simile a GetPropertyChangedSignal() , ma per gli attributi.
In generale, è una buona idea usare questo metodo invece di una connessione a Changed con una funzione che controlla il nome dell'attributo.Le successive chiamate a questo metodo sullo stesso oggetto con lo stesso nome di attributo restituiscono lo stesso evento.
L'esempio di codice seguente restituisce un segnale che attiva la funzione attributeChanged() quando il parametro InitialPosition della parte cambia:
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)
Vedi anche Instance.AttributeChanged che si attiva ogni volta che viene modificato qualsiasi attributo sull'esempio.
Parametri
Il nome dell'attributo specificato per il quale viene restituito il segnale di modifica.
Restituzioni
Un evento che si attiva quando viene modificato l'attributo specificato.
GetAttributes
Questo metodo restituisce un dizionario di coppie chiave-valore per ciascun attributo in cui la chiave è il nome dell'attributo e il valore è un valore non nil .
Ad esempio, il seguente snippet di codice produce gli attributi e i valori di un'istanza:
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
Vedi anche Instance:GetAttribute() che restituisce il valore che è stato assegnato al nome dell'attributo dato.
Restituzioni
Un dizionario di coppie string → varianti per ogni attributo in cui la stringa è il nome dell'attributo e la variabile è un valore non nullo.
GetChildren
Restituisce un array (una tabella numericamente indicizzata) che contiene tutti i figli diretti dell'esempio, o ogni Instance il cui Parent è uguale all'oggetto.L'array può essere iterato utilizzando un ciclo while numerico o generico:
local Workspace = game:GetService("Workspace")-- Esempio di ciclo numericolocal children = Workspace:GetChildren()for i = 1, #children dolocal child = children[i]print(child.Name .. " is child number " .. i)end
local Workspace = game:GetService("Workspace")-- Esempio for-loop genericolocal children = Workspace:GetChildren()for i, child in children doprint(child.Name .. " is child number " .. i)end
I bambini sono ordinati in base all'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
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
Restituisce una stringa codificata dell'ID di debug utilizzato internamente da Roblox. Nota che:
- Questo oggetto è protetto. Tentare di utilizzarlo in un Script o LocalScript causerà un errore.
- Un ID di debug è un ID utilizzato nei processi di debugging.Consente a un debugger di leggere ogni istruzione prima che un'applicazione lo processi.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 (ad esempio, oggetti che condividono lo stesso nome).
Parametri
La lunghezza dello spettro.
Restituzioni
La Stringadell'ID di 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 quei figli, e così via.
Restituzioni
Un array che contiene i discendenti dell'esempio.
Campioni di codice
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
Restituisce una stringa che descrive l'ascendenza dell'istanza.La stringa è una concatenazione del Name dell'oggetto e dei suoi antenati, separati da periodi.Il DataModel ( game ) non viene considerato.Ad esempio, un Part in Workspace può restituire Workspace.Part .
Quando viene chiamata su un Instance che non è un discendente del DataModel , questa funzione considera tutti gli antenati fino al più antico, senza un Parent .
Questa funzione è utile per il logging e il debugging.Non dovresti tentare di analizzare la stringa restituita per qualsiasi operazione utile; questa funzione non evita i periodi (o qualsiasi altro simbolo) nei nomi degli oggetti.In altre parole, anche se il suo output spesso sembra essere un identificatore Luau valido, non è garantito.
Restituzioni
Campioni di codice
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
GetStyledPropertyChangedSignal
Parametri
Restituzioni
GetTags
Questo metodo restituisce un array di tag applicati all'istanza esempio, come stringhe.Puoi aggiungere tag sia in Studio nella finestra Proprietà o durante l'esecuzione con AddTag().
Questo metodo è utile quando vuoi fare qualcosa con più etichette su un'istanza alla volta.Tuttavia, non è efficiente 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 di esecuzione con AddTag().
Parametri
Restituzioni
IsAncestorOf
Restituisce vero se un Instance è un antenato del DIscendentedato.
Un Instance è considerato l'antenato di un oggetto se l'oggetto di Instance.Parent o uno dei suoi parentdi Instance.Parent è impostato su Instance .
Vedi anche, Instance:IsDescendantOf() .
Parametri
Restituzioni
Campioni di codice
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
Restituisce true se un Instance è un discendente dell'antenato dato.
Nota che IsDescendantOf() non può essere utilizzato con un parametro di nil 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
IsPropertyModified
Restituisce true se il valore memorizzato nella proprietà specificata non è predefinito.Ad esempio, se si esegue l'output della proprietà Rotation di un TextLabel indicando 0 , allora chiamare IsPropertyModified("Rotation") sulla etichetta restituirà false perché 0 è il valore predefinito per TextLabel.Rotation .
Parametri
Restituzioni
Booleano che indica se la proprietà è modificata.
RemoveTag
Questo metodo rimuove un tag da un'esempio.Non lancerà un errore se l'oggetto non ha il tag.La rimozione di un tag con successo attiverà un segnale creato da CollectionService:GetInstanceRemovedSignal() con il tag specificato.
Nota che quando si etichette un'istanza, è comune che alcune risorse vengano utilizzate per dare al tag la sua funzionalità, ad esempio connessioni event o tabelle.Per prevenire perdite di memoria, è una buona idea pulirle (disconnetti, imposta su nil , ecc.) quando non sono più necessarie per un tag.
Parametri
Restituzioni
ResetPropertyToDefault
Ripristina una proprietà al suo valore predefinito.Ad esempio, chiamare ResetPropertyToDefault("Rotation") su un TextLabel è equivalente a impostare il suo Rotation a 0 (il valore predefinito della Proprietà).
Parametri
Restituzioni
SetAttribute
Questo metodo imposta l'attributo con il nome specificato al valore specificato.Se il valore fornito è nil , l'attributo verrà rimosso, poiché nil viene restituito per impostazione predefinita.
Ad esempio, il seguente snippet di codice imposta l'attributo InitialPosition dell'istanza a Vector3.new(0, 10, 0) :
local Workspace = game:GetService("Workspace")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 underscore.
- Non sono consentiti spazi o simboli unici.
- Le corde devono essere di 100 caratteri o meno.
- I nomi non sono ammessi a iniziare con RBX a meno che il chiamante sia uno script del nucleo Roblox (riservato a Roblox).
Quando si tenta di impostare un attributo a un inserisci / scrivinon supportato, verrà lanciato un errore.
Vedi anche
- Instance:GetAttribute() che restituisce il valore che è stato assegnato al nome dell'attributo dato.
- Instance:GetAttributes() che restituisce un dizionario di coppie chiave-valore per ciascuno degli attributi dell'esempio.
Parametri
Il nome dell'attributo che viene Impostare.
Il valore per impostare l'attributo specificato.
Restituzioni
WaitForChild
Restituisce il figlio del Instance con il nome fornito.Se il bambino non esiste, produrrà il thread attuale fino a quando non lo farà.Se il parametro timeOut è specificato, questo metodo scadrà dopo il numero specificato di secondi e restituirà nil .
Uso primario
WaitForChild() è estremamente importante quando si lavora su codice eseguito dal client in un LocalScript .Il motore Roblox non garantisce il tempo o l'ordine in cui gli oggetti vengono replicati dal server al client.Inoltre, se un'esperienza ha Workspace.StreamingEnabled impostata a vero, BaseParts quelle che sono molto lontane dal personaggio del Giocatorepotrebbero non essere trasmesse al client, potenzialmente causando l'interruzione degli script quando si indexano oggetti che non esistono ancora sul client.
Notizie
- Questa funzione non restituisce se esiste un figlio con il nome dato quando viene eseguita la chiamata.
- Instance:FindFirstChild() è un'alternativa più efficiente a WaitForChild() per gli oggetti che si suppone esistano.
- Se una chiamata a questo metodo supera i 5 secondi senza restituire e nessun parametro timeOut è stato specificato, verrà stampato un avviso sull'output che il thread può produrre indefinitamente.
Parametri
Il Instance.Name da cercare.
Un parametro di timeout opzionale.
Restituzioni
Campioni di codice
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")
Eventi
AncestryChanged
Si accende quando la proprietà Instance.Parent della proprietà dell'oggetto o di uno dei suoi antenati viene modificata.
Questo evento include due parametri: child si riferisce al Instance il cui Instance.Parent è stato effettivamente cambiato, mentre parent si riferisce al nuovo Instance.Parent di questa esempio.
Puoi utilizzare questo evento per tracciare la cancellazione di un'istanza in Studio, come la cancellazione manuale nell'esploratore o attraverso un Collegare.Se devi 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 del Instance il cui Instance.Parent è stato cambiato.
Campioni di codice
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
Questo evento si attiva ogni volta che viene modificato qualsiasi attributo sull'esempio, incluso quando un attributo viene impostato su nil .Il nome dell'attributo modificato viene passato alla funzione connessa.
Ad esempio, il seguente snippet di codice connette la funzione attributeChanged() alla fiamma ogni volta che viene modificato uno degli attributi della parte:
local Workspace = game:GetService("Workspace")
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 specifico cambia.
Parametri
Il nome dell'attributo che è stato cambiato.
ChildAdded
Fuochi dopo che un oggetto è stato 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 indexa i discendenti di questi oggetti.Questo perché l'oggetto e i suoi discendenti non sono garantiti a replicarsi simultaneamente dal server al client.Ad esempio:
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)
Nota, questa funzione funziona solo per i figli immediati del Instance . Per una funzione che cattura tutti i discendenti, usa Instance.DescendantAdded .
Vedi anche Instance.ChildRemoved .
Parametri
Campioni di codice
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
Incendi dopo che un bambino viene rimosso da questo Instance .
Rimosso si riferisce a quando il genitore di un oggetto viene cambiato da questo Instance a qualcosa di diverso da questo Instance .Nota, questo evento si attiverà anche quando un bambino viene distrutto (utilizzando Instance:Destroy() ) poiché la funzione distruzione imposta il padre di un oggetto a nil .
Questa funzione funziona solo per i figli immediati del Instance . Per una funzione che cattura tutti i discendenti, usa Instance.DescendantRemoving .
Vedi anche Instance.ChildAdded .
Parametri
Campioni di codice
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
Questo evento si attiva dopo che è stato aggiunto un discendente al Instance .
Mentre spara per ogni DIscendente, genitorare un oggetto al Instance farà fuocare l'evento per questo oggetto e tutti i suoi discendenti individualmente.
Se sei preoccupato solo dei figli diretti del Instance , usa Instance.ChildAdded invece.
Vedi anche Instance.DescendantRemoving .
Parametri
Campioni di codice
This following example will print the name of any object that is added to the Workspace:
local function onDescendantAdded(descendant)
print(descendant)
end
workspace.DescendantAdded:Connect(onDescendantAdded)
local part = Instance.new("Part")
part.Parent = workspace
DescendantRemoving
Questo evento si attiva immediatamente prima di i cambiamenti del genitore Instance in modo che un'istanza discendente non sarà più un DIscendente.Destroy() cambia l'esempiodi Parent a nil, quindi chiamare quel metodo su un discendente del padre farà scattare questo evento.
Dal momento che questo evento si attiva prima della rimozione del DIscendente, il genitore del discendente rimarrà invariato al momento di questo evento di fuoco.Se il discendente è anche un figlio diretto del parent, questo evento verrà attivato prima di Instance.ChildRemoved.
Se un discendente ha figli, questo evento si attiva prima con il discendente, seguito dai suoi discendenti.
Avviso
Questo evento si attiva con l'oggetto discendente che viene rimosso.L'attempto di impostare il Parent del discendente a qualcos'altro fallirà.Ecco un esempio che lo dimostra:
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
Vedi anche DescendantAdded .
Parametri
Campioni di codice
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
Il Instance non verrà mai eliminato dalla memoria mentre una funzione connessa lo sta ancora utilizzando.Tuttavia, se la funzione produce a qualsiasi punto, il Instance e i suoi discendenti saranno genitori di nil .
Se la proprietà Workspace.SignalBehavior è impostata su Enum.SignalBehavior.Immediate , questo evento si attiva immediatamente prima che Instance o uno dei suoi antenati venga distrutto con Instance:Destroy() .
Se la proprietà Workspace.SignalBehavior è impostata su Enum.SignalBehavior.Deferred , questo evento si attiva al prossimo punto di ripresa, che sarà dopo che Instance o uno dei suoi antenati viene distrutto con Instance:Destroy() .
Con il comportamento Deferred , la connessione di uno script al proprio evento Instance.Destroying è problematica, poiché lo script verrà distrutto prima che possa essere chiamato il richiamo (cioè non verrà eseguito).
Quando si elimina un Instance in Studio, come l'eliminazione manuale attraverso il Explorer o attraverso un Collegare, il Instance non viene distrutto.Invece, il genitore è impostato su nil che puoi tracciare con Instance.AncestryChanged .
Campioni di codice
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())