Instance

Visualizza obsoleti

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Non costruibile
Non Navigabile

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à

  • Lettura Parallela

    Determina se un Instance e i suoi discendenti possono essere clonati utilizzando Instance:Clone() e possono essere salvati/pubblicati.

  • Capabilities:SecurityCapabilities
    Lettura Parallela

    Il set di capacità consentito di essere utilizzato per gli script all'interno di questo container.

  • Lettura Parallela

    Un identificatore non univoco del Instance .

  • Non Replicato
    Lettura Parallela

    Determina il genitore gerarchico del Instance .

  • Nascosto
    Sicurezza Plugin
    Lettura Parallela
    Obsoleto

    Una proprietà deprecata che proteggeva gli oggetti CoreGui .

  • Non Replicato
    Lettura Parallela

    Trasforma l'istanza in un container sandbox.

  • UniqueId:UniqueId
    Non Replicato
    Non programmabile
    Sicurezza Roblox
    Lettura Parallela

    Un identificatore univoco per l'esempio.

Metodi

Eventi

Proprietà

Archivable

Lettura Parallela

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()) --> Part
part.Archivable = false
print(part:Clone()) --> nil

Capabilities

SecurityCapabilities
Lettura Parallela

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

Lettura Parallela

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.Baseplate
local 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

Non Replicato
Lettura Parallela

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

Nascosto
Sicurezza Plugin
Lettura Parallela

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

Non Replicato
Lettura Parallela

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

UniqueId
Non Replicato
Non programmabile
Sicurezza Roblox
Lettura Parallela

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

tag: string
Valore predefinito: ""

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() do
if descendant:IsA("BasePart") then
descendant:Destroy()
end
end

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.

Instance:ClearAllChildren

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

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().

Cloning an Instance

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

Destroy

()

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 = nil
task.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.

Instance:Destroy()

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

FindFirstAncestor

Scrivi Parallelo

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

name: string

Il Instance.Name da cercare.

Valore predefinito: ""

Restituzioni

Il Instance trovato.

FindFirstAncestorOfClass

Scrivi Parallelo

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

className: string

Il Object.ClassName da cercare.

Valore predefinito: ""

Restituzioni

Il Instance trovato.

FindFirstAncestorWhichIsA

Scrivi Parallelo

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")) --> true
print(part:IsA("BasePart")) --> true
print(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

className: string

Il Object.ClassName da cercare.

Valore predefinito: ""

Restituzioni

Il Instance trovato.

FindFirstChild

Scrivi Parallelo

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 lavoro
Workspace.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 then
part.Transparency = 0.5
end
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 = part
local c = part.Color --> Un Colore3
local 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

name: string

Il Instance.Name da cercare.

Valore predefinito: ""
recursive: boolean

Se la ricerca debba essere eseguita ricorsivamente o meno.

Valore predefinito: false

Restituzioni

Il Instance trovato.

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".

Instance:FindFirstChild

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

FindFirstChildOfClass

Scrivi Parallelo

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

className: string

Il Object.ClassName da cercare.

Valore predefinito: ""

Restituzioni

Il Instance trovato.

Campioni di codice

Instance:FindFirstChildOfClass

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

FindFirstChildWhichIsA

Scrivi Parallelo

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")) --> vero
print(part:IsA("BasePart")) --> vero
print(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

className: string

Il Object.ClassName da cercare.

Valore predefinito: ""
recursive: boolean

Se la ricerca debba essere eseguita ricorsivamente o meno.

Valore predefinito: false

Restituzioni

Il Instance trovato.

FindFirstDescendant

Scrivi Parallelo

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

name: string

Il Instance.Name per cercare.

Valore predefinito: ""

Restituzioni

Il Instance trovato.

GetActor

Scrivi Parallelo

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

Il Actor trovato.

GetAttribute

Variant
Scrivi Parallelo

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.Part
part:SetAttribute("InitialPosition", part.Position)
local initialPosition = instance:GetAttribute("InitialPosition")
print(initialPosition)
Vedi anche

Parametri

attribute: string

Il nome dell'attributo recuperato.

Valore predefinito: ""

Restituzioni

Variant

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

attribute: string

Il nome dell'attributo specificato per il quale viene restituito il segnale di modifica.

Valore predefinito: ""

Restituzioni

Un evento che si attiva quando viene modificato l'attributo specificato.

GetAttributes

Scrivi Parallelo

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.Part
part:SetAttribute("InitialPosition", part.Position)
part:SetAttribute("CanUse", true)
for name, value in part:GetAttributes() do
print(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

Instances
Scrivi Parallelo

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 numerico
local children = Workspace:GetChildren()
for i = 1, #children do
local child = children[i]
print(child.Name .. " is child number " .. i)
end

local Workspace = game:GetService("Workspace")
-- Esempio for-loop generico
local children = Workspace:GetChildren()
for i, child in children do
print(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

Instances

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.

Instance:GetChildren

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

GetDebugId

Non Navigabile
Sicurezza Plugin

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

scopeLength: number

La lunghezza dello spettro.

Valore predefinito: 4

Restituzioni

La Stringadell'ID di debug.

Campioni di codice

Instance:GetDebugId

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

GetDescendants

Scrivi Parallelo

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.

Instance:GetDescendants

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

GetFullName

Scrivi Parallelo

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

Il nome completo del Instance .

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.

Instance:GetFullName

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

This code sample re-implements the Instance:GetFullName() function in Lua.

Instance:GetFullName Lua Implementation

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

GetStyled

Variant

Parametri

name: string
Valore predefinito: ""

Restituzioni

Variant

GetStyledPropertyChangedSignal

Parametri

property: string
Valore predefinito: ""

Restituzioni

GetTags

Scrivi Parallelo

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

Scrivi Parallelo

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

tag: string
Valore predefinito: ""

Restituzioni

IsAncestorOf

Scrivi Parallelo

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

descendant: Instance

Il discendente Instance .

Valore predefinito: ""

Restituzioni

Vero se il Instance è un antenato del DIscendentedato.

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.

Instance:IsAncestorOf()

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

IsDescendantOf

Scrivi Parallelo

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

ancestor: Instance

L'antenato Instance.

Valore predefinito: ""

Restituzioni

Vero se il Instance è un discendente dell'antenato dato.

Campioni di codice

Instance:IsDescendantOf

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

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

property: string
Valore predefinito: ""

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

tag: string
Valore predefinito: ""

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

property: string
Valore predefinito: ""

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.Part
part: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

Parametri

attribute: string

Il nome dell'attributo che viene Impostare.

Valore predefinito: ""
value: Variant

Il valore per impostare l'attributo specificato.

Valore predefinito: ""

Restituzioni

()

WaitForChild

Può Rendere

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

childName: string

Il Instance.Name da cercare.

Valore predefinito: ""
timeOut: number

Un parametro di timeout opzionale.

Valore predefinito: ""

Restituzioni

Il Instance trovato.

Campioni di codice

The following code waits for an instance named "Part" to be added to Workspace.

Instance:WaitForChild

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

child: Instance

Il Instance il cui Instance.Parent è stato cambiato.

parent: Instance

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.

Instance.AncestryChanged

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

AttributeChanged

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

attribute: string

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

child: Instance

Il Instance che è stato aggiunto.


Campioni di codice

This snippet prints the names of objects as they are added to the Workspace:

Instance.ChildAdded

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

ChildRemoved

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

child: Instance

Il Instance che è stato rimosso.


Campioni di codice

This snippet prints the names of objects as they are removed from the Workspace:

Instance.ChildRemoved

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

DescendantAdded

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

descendant: Instance

Il Instance che è stato aggiunto.


Campioni di codice

This following example will print the name of any object that is added to the Workspace:

Instance.DescendantAdded

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

descendant: Instance

Il Instance che viene rimosso.


Campioni di codice

The following example prints the name of any descendant as it is being removed from the Workspace:

Instance.DescendantRemoving

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

Destroying

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.

Using the Destroying Event (Immediate signals)

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

This sample demonstrates how, when using Deferred signal behavior, an Instance is destroyed before the signal fires.

Using the Destroying Event (Deferred signals)

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

StyledPropertiesChanged