Instance
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
La instancia es la clase base para todas las clases en la hierarcha de clases de Roblox que pueden formar parte del árbol de datos. No es posible crear directamente objetos de instancia.
La instancia tiene una función especial llamada Instance.new() que se usa para crear objetos a través del código. Esta función toma el nombre de la clase como parámetro y devuelve el objeto creado. Las clases y servicios abstractos no se pueden crear con la función instancia.new.
Resumen
Propiedades
Determina si un Instance y sus descendientes se pueden clonar usando Instance:Clone() , y se pueden guardar/publicar.
El conjunto de capacidades permitidas para ser usadas para scripts dentro de este contenedor.
Un identificador no único de la Instance .
Determina el padre de la jerarquía del Instance.
Una propiedad obsoleta que solía proteger CoreGui .
Convierte la instancia en un contenedor de prueba de arena.
Métodos
Aplica una etiqueta a la instancia.
Esta función destruye todos los hijos de una instancia.
Crea una copia de una instancia y todos sus descendientes, ignorando las instancias que no son Archivable .
Establece la propiedad Instance.Parent a nulo, bloquea la propiedad Instance.Parent y desconecta todas las conexiones, y llama Destruir en todos los hijos.
Devuelve el primer ancestro de la Instance cuyo Instance.Name es igual al nombre dado.
Devuelve el primer ancestro de la Instance cuyo Object.ClassName es igual al nombre de usuario dado.
Devuelve el primer ancestro de la Instance para el cual Object:IsA() devuelve cierto para el nombre dado.
Devuelve el primer hijo de la Instance encontrado con el nombre dado.
Devuelve el primer hijo de la Instance cuyo ClassName es igual al nombre de la clase dado.
Devuelve el primer hijo de la Instance para quien Object:IsA() devuelve cierto para el nombre dado.
Devuelve el primer descendiente encontrado con el Instance.Name dado.
Devuelve el Class.Actor asociado con la Instancia, si es que hay uno
Devuelve el valor que se ha asignado al atributo nombrado.
Regresa un evento que se activa cuando se cambia el atributo dado.
Regresa un diccionario de los atributos de la instancia.
Devuelve un arreglo que contiene todos los hijos de la instancia.
Devuelve un valor de cadena codificado de el ID de diagnóstico usado internamente por Roblox.
Regresa un arreglo que contiene todos los descendientes de la instancia.
Regresa una cadena que describe el antepasado de la instancia.
Obtiene un arreglo de todas las etiquetas aplicadas a la instancia.
Compruebe si la instancia tiene una etiqueta especificada.
Regresa true si un Instance es un ancestro del descendiente dado.
Regresa true si un Class.Instance es un antecesordel ancestral dado.
Elimina una etiqueta de la instancia.
Establece el atributo con el nombre dado al valor dado.
Devuelve el hijo de la Instance con el nombre dado. Si el hijo no existe, devolverá el hilo actual hasta que lo haga.
Eventos
Activa cuando la propiedad Instance.Parent del objeto o uno de sus ancestros cambia.
Dispara cuando se cambia un atributo en el Instance .
Se activa después de que un objeto esté asociado a este Instance .
Dispara después de que se elimine un niño de este Instance .
Dispara después de que se agregue un descendiente a la Instance .
Dispara inmediatamente antes de que se elimine un descendiente de la Instance .
Dispara inmediatamente antes (o se pospone hasta después) de que se destruya la instancia a través de Instance:Destroy() .
Propiedades
Archivable
Esta propiedad determina si la instancia debe incluirse cuando se publica o guarda la experiencia, o cuando se llama a Clone() en uno de los ancestros de la instancia. Al llamar Clone() directamente en una instancia, se devolverá nil si esa instancia no es
Copiar un objeto en Studio usando las opciones <a href="https://developer.microsoft.com/en-us/microsoft-edge/Copy-object">Duplicate\ o <a href="https://developer.microsoft.com/en-us/microsoft-edge/Copy-object">Copy\ / <a href="https://developer.microsoft.com/en-us/microsoft-edge/Paste\ para la copia.
local part = Instance.new("Part")print(part:Clone()) --> Partpart.Archivable = falseprint(part:Clone()) --> nil
Capabilities
El conjunto de capacidades permitidas para ser usadas para scripts dentro de esta instancia. Para que las capacidades tengan efecto, Instance.Sandboxed propiedad debe estar habilitada.
Esta propiedad se usa por una funciónexperimental. Vea la página Capacidades de Script para más detalles.
Name
Un identificador no único de la Instance .
Esta propiedad es un identificador que describe un objeto. Los nombres no son necesariamente identificadores únicos, sin embargo; múltiples hijos de un objeto pueden compartir el mismo nombre. Los nombres se utilizan para organizar la jerarquía del objeto, junto con permitir que los scripts accedan a objetos específicos. El nombre de una instancia no puede exceder 100 caracteres en tamaño.
El nombre de un objeto a menudo se usa para acceder al objeto a través de la jerarquía de modelo de datos usando los siguientes métodos:
local baseplate = workspace.Baseplatelocal baseplate = workspace["Baseplate"]local baseplate = workspace:FindFirstChild("BasePlate")
Para hacer un objeto accesible usando el operador de punto, el nombre de un objeto debe seguir una determinada sintaxis. El nombre del objeto debe comenzar con un signo de exclamación o letra. El resto del nombre sólo puede contener letras, números o signos de subrayado (sin otros caracteres especiales). Si el nombre del objeto no sigue esta sintaxis, no se podrá acceder a él usando el operador de punto y Lua no lo interpretará como un identificador.
Si más de un objeto con el mismo nombre es un hermano, entonces cualquier intento de indexar un objeto por ese nombre devolverá el único de los objetos encontrados similar a Instance:FindFirstChild() , pero no siempre el objeto deseado. Si un objeto específico necesita ser accedido a través del código, se recomienda darle un nombre único, o garantizar que ninguno de sus hermanos comparten el mismo nombre que él.
Nota, se puede obtener un nombre completo que muestra la jerarquía de la instancia usando Instance:GetFullName() .
Parent
La propiedad Padre determina el padre de la cadena de mando del Instance . La siguiente terminología se usa comúnmente cuando se habla de cómo se estableceresta propiedad:
- Un objeto es un hijo ( a la vez que su padre está configurado para ese objeto.))
- Los descendientes de un Class.Instance son los hijos de ese objeto, plus los descendientes de los hijos también.
- Los ancestros de un Class.Instance son todos los objetos de los que es descendiente.
Es de esta propiedad que muchos otros miembros de la API obtienen su nombre, como GetChildren y FindFirstChild .
La función Remove establece esta propiedad a nil. Al llamar a Destroy , se establecerá el padre de un objeto destruido y todos sus descendientes a Instance y también 1>bloquear1> la propiedad padre. Se produce un error cuando se establece el padre de un objeto destruido.
Esta propiedad también se usa para administrar si un objeto existe en el juego o necesita ser eliminado. Mientras un objeto padre está en el DataModel , se almacena en una variable, o se refiere a una propiedad de otro objeto, el objeto permanece en el juego. De lo contrario, el objeto se eliminará autom
Los objetos recién creados que se crean con Instance.new() no tendrán padre, y generalmente no serán visibles o funcionales hasta que se establezca uno. La creación más elemental de un objeto tiene dos pasos: crear el objeto y luego establecer su padre.
-- 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)
Cuando se realiza un cambio en ciertas propiedades mientras se tiene una instancia en el DataModel , el motor puede necesitar realizar trabajo extra internamente (para cosas como la replicación, la renderización y el diseño de GUI). Siempre que sea posible, cambia las propiedades de una instancia antes de que establezcas su padre, en lugar de después, para evitar realizar ese trabajo redundantemente.
Replicación de Objetos
Un objeto creado por el servidor no se replicará a los clientes hasta que se asigne a algún objeto que se replica. Cuando se crea un objeto y se configuran muchas propiedades, se recomienda establecer el padre último. Esto garantiza que el objeto se replica una vez, en lugar de replicar muchos cambios de propiedad.
local part = Instance.new("Part") -- Evite usar el segundo parámetro aquípart.Anchored = truepart.BrickColor = BrickColor.new("Really red")-- Potencialmente muchos cambios de propiedad más podrían ir aquí aquí ...-- ¡Siempre fijar el padre último!part.Parent = workspace
Sin embargo, si estabas vinculando tus partes a un Model cuyo padre aún no ha sido establecido, entonces vincular cada parte a ese modelo es correcto, ya que el modelo aún no se habrá replicado.
RobloxLocked
Esta propiedad se usaba para proteger objetos en el servicio de CoreGui de ser alterados por usuarios de una manera no autorizada. Ha sido depreciada y no hace nada.
Sandboxed
Convierte la instancia en un contenedor de prueba. Los contenedores de prueba son una característica experimental que limita las acciones que los scripts dentro de un contenedor particular pueden realizar.
Consulte la página Capacidades de Script para obtener más información.
UniqueId
Métodos
AddTag
Este método aplica una etiqueta a la instancia, con ningún efecto si la etiqueta ya está aplicada. Añadir con éxito una etiqueta creará una señal creada por CollectionService:GetInstanceAddedSignal() con la etiqueta proporcionada.
Tenga en cuenta que cuando se etiqueta una instancia, es común que se utilicen algunos recursos para proporcionar la funcionalidad de la etiqueta, por ejemplo, conexiones de eventos o tablas. Para evitar fugas de memoria, es una buena idea limpiar estos (desconectar, establecer a
Parámetros
Devuelve
ClearAllChildren
Esta función destruye todos los hijos de una instancia.
Como Instance:Destroy() también se llama a sí mismo en los hijos de un objeto en el que se usa, esta función destruirá todos los descendientes.
Alternativas para borrar todos los niños
Si el desarrollador no desea destruir todos los descendientes, debería usar Instance:GetChildren() o Instance:GetDescendants() para hacer un bucle a través de un objeto y seleccionar qué destruir. Por ejemplo, el siguiente código de ejemplo destruirá todas las partes en un objeto.
for _, instance in object:GetDescendants() doif instance:IsA("BasePart") theninstance:Destroy()endend
Devuelve
Muestras de código
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
Clon crea una copia de una instancia y todos sus descendientes, ignorando todas las instancias que no son Archivable . La copia de la instancia raíz se devuelve por este método y su <
Si se establece una propiedad de referencia como ObjectValue.Value en una instancia clonada, el valor de la propiedad de la copia depende del valor original:
- Si una propiedad de referencia se refiere a una instancia que fue también clonada, la copia se referirá a la copia.
- Si una propiedad de referencia se refiere a un objeto que no fue no clonado, el mismo valor se mantiene en la copia.
Devuelve
Muestras de código
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
Establece la propiedad Instance.Parent a nulo, bloquea la propiedad Instance.Parent, desconecta todas las conexiones y llama a Destruir en todos los hijos. Esta función es la manera correcta de deshacerse de los objetos que ya no son necesarios. El deshacer de objetos no necesarios es importante, ya que los objetos no necesarios y las conexiones en un lugar consum
Consejo: Después de llamar Destruir en un objeto, establece cualquier variable que se refiera al objeto (o sus descendientes) a nulo. Esto evita que tu código acceda a nada para hacer con el objeto.
local part = Instance.new("Part")part.Name = "Hello, world"part:Destroy()-- No hacer esto:print(part.Name) --> "Hola, mundo"-- Haga esto para evitar que la línea anterior funcione:part = nil
Una vez que un Instance ha sido destruido por este método, no se puede reutilizar porque la propiedad Instance.Parent está bloqueada. Para eliminar temporalmente un objeto, establece Parent en lugar. Por ejemplo:
object.Parent = nilwait(2)object.Parent = workspace
Para destruir un objeto después de un período de tiempo establecido, usa Debris:AddItem() .
Devuelve
Muestras de código
local part = script.Parent.Part
part:Destroy()
FindFirstAncestor
Devuelve el primer ancestro de la Instance cuyo Instance.Name es igual al nombre dado.
Esta función trabaja hacia arriba, lo que significa que comienza en el inmediato Instance.Parent de la instancia y trabaja hacia el DataModel . Si no se encuentra ningún ancestral que coincida,返回 nil。
El siguiente código de ejemplo encontraría el primer ancestro del objeto nombrado 'Car'.
local car = object:FindFirstAncestor("Car")
Para variantes de esta función que encuentran ancestros de una clase específica, consulte Instance:FindFirstAncestorOfClass() y Instance:FindFirstAncestorWhichIsA() .
Parámetros
El Instance.Name para buscar.
Devuelve
FindFirstAncestorOfClass
Devuelve el primer ancestro de la Instance cuyo Object.ClassName es igual al nombre de usuario dado.
Esta función trabaja hacia arriba, lo que significa que comienza en el inmediato Instance.Parent de la instancia y trabaja hacia el DataModel . Si no se encuentra ningún ancestral que coincida,返回 nil。
Un uso común de esta función es encontrar el Model a un BasePart que pertenece. Por ejemplo:
local model = part:FindFirstAncestorOfClass("Model")
Esta función es una variante de Instance:FindFirstAncestor() que comprueba la propiedad Object.ClassName en lugar de Instance.Name . 1> Class.Instance:FindFirstAncestorWhichIsA()1> también existe, usando el método 4> Class.Object:IsA()4> en lugar
Parámetros
El Object.ClassName para buscar.
Devuelve
FindFirstAncestorWhichIsA
Devuelve el primer ancestro de la Instance para el cual Object:IsA() devuelve cierto para el nombre dado.
Esta función trabaja hacia arriba, lo que significa que comienza en el inmediato Instance.Parent de la instancia y trabaja hacia el DataModel . Si no se encuentra ningún ancestral que coincida,返回 nil。
A diferencia de Instance:FindFirstAncestorOfClass(), esta función usa Object:IsA() que respeta la herencia de clase. Por ejemplo:
print(part:IsA("Part")) --> trueprint(part:IsA("BasePart")) --> trueprint(part:IsA("Instance")) --> true
Por lo tanto, el siguiente código de ejemplo devolverá el primer antecesorde BasePart , independientemente de si es un WedgePart , MeshPart o 1> Class.Part1> .
local part = object:FindFirstAncestorWhichIsA("BasePart")
También, Instance:FindFirstAncestor() .
Parámetros
El Object.ClassName para buscar.
Devuelve
FindFirstChild
Devuelve el primer hijo de la Instance con el nombre dado,
o nil si no existe tal hijo. Si el argumento opcional recursive es cierto, esta función busca todos los descendientes, en lugar de solo los hijos inmediatos de la Instance .
Comprobando la existencia de un objeto
FindFirstChild es necesario si necesitas verificar que un objeto existe antes de continuar. Intentar indexar a un hijo por nombre usando el operador de punto arroja un error si el hijo no existe.
-- Las siguientes líneas de error si no existe la parte en el espacio de trabajo:workspace.Part.Transparency = 0.5
Usa FindFirstChild para primer verificar por Part, luego usa una declaración if para ejecutar el código que necesita.
local part = workspace:FindFirstChild("Part")if part thenpart.Transparency = 0.5end
Encontrando un niño cuyo nombre coincide con una propiedad
A veces, el Name de un objeto es el mismo que el de una propiedad de su Parent. Cuando se usa el operador de punto, las propiedades tienen la prioridad sobre los hijos si comparten un nombre.
En el siguiente ejemplo, un Folder llamado «Color» se agrega a un Part que también tiene la propiedad Part.Color. 1>Class.Part.Color1> se refiere al 4>Datatype.Color34>, no 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 beneficio de usar FindFirstChild() de esta manera es que la introducción de nuevas propiedades no implica riesgo para su código.
Nota de rendimiento
FindFirstChild() tarda un poco más que usar el operador de punto y casi 8 veces más que simplemente almacenar una referencia a un objeto
Parámetros
El Instance.Name para buscar.
Si la búsqueda debe o no deberse realizar recursivamente.
Devuelve
Muestras de código
local found = workspace:FindFirstChild("Brick")
if found then
found.Name = "Foo"
end
FindFirstChildOfClass
Devuelve el primer hijo de la Instance cuyo ClassName es igual al nombre de la clase dado.
Si no se encuentra un hijo que coincida, esta función devuelve nulo.
A diferencia de Instance:FindFirstChildWhichIsA() esta función solo devuelve objetos cuya clase coincida con el nombre dado, ignorando la herencia de clase.
Los desarrolladores que buscan un niño por nombre deberían usar Instance:FindFirstChild() en su lugar.
Parámetros
El Object.ClassName para buscar.
Devuelve
Muestras de código
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
Devuelve el primer hijo de la Instance para quien Object:IsA() devuelve cierto para el nombre dado.
Si no se encuentra ningún hijo que coincida, esta función devuelve nulo. Si el argumento recursivo opcional es cierto, esta función busca todos los descendientes, en lugar de solo los hijos inmediatos de la Instance .
A diferencia de Instance:FindFirstChildOfClass() , esta función usa Object:IsA() que respeta la herencia de clase. Por ejemplo:
print(part:IsA("Part")) --> verdaderoprint(part:IsA("BasePart")) --> verdaderoprint(part:IsA("Instance")) --> true
Por lo tanto, el siguiente código de ejemplo devolverá el primer hijo BasePart , independientemente de si es un WedgePart , MeshPart o 2>Class.Part2> .
local part = object:FindFirstChildWhichIsA("BasePart")
Los desarrolladores que buscan un niño por nombre, deben usar Instance:FindFirstChild() en su lugar.
Parámetros
El Object.ClassName para buscar.
Si la búsqueda debe o no deberse realizar recursivamente.
Devuelve
FindFirstDescendant
Devuelve el primer descendiente encontrado con el Instance.Name dado.
Este método está deshabilitado y no se puede usar. Para encontrar el primer descendiente de una instancia, considere usar el parámetro recursive en Instance:FindFirstChild() en lugar.
Parámetros
El Instance.Name para buscar.
Devuelve
GetActor
Si el Instance es un Actor , el Actor en sí mismo se devuelve. De lo contrario, se devuelve su ancestral más cercano 1>Class.Actor1> . Si ningún ancestral es un 4>Class.Actor4>, el resultado es 7>nil7> .
Devuelve
GetAttribute
Este método devuelve el valor que se ha asignado al nombre de atributo especificado. Si no se ha asignado ningún atributo, se devuelve nil .
Por ejemplo, el siguiente código de ejemplo establece y luego obtiene el valor del atributo InicialPosition de la instancia:
local part = workspace.Partpart:SetAttribute("InitialPosition", part.Position)local initialPosition = instance:GetAttribute("InitialPosition")print(initialPosition)
Ver también
- Instance:SetAttribute() que establece el atributo con el nombre dado al valor dado.
- Instance:GetAttributes() que devuelve un diccionario de pares de valores de clave para cada uno de los atributos de la instancia.
Parámetros
El nombre del atributo que se está recuperando.
Devuelve
El valor que se ha asignado al nombre de atributo especificado. Si no se ha asignado ningún atributo, se devuelve nil .
GetAttributeChangedSignal
Esta función devuelve un evento que se comporta exactamente como el evento Changed, excepto que solo se activa cuando el atributo especificado cambia; de hecho, es similar a GetPropertyChangedSignal() pero para los atributos.
Generalmente es una buena idea usar este método en lugar de una conexión a Changed con una función que comprueba el nombre del atributo. Las siguientes llamadas a este método en el mismo objeto con el mismo nombre de atributo devuelven el mismo evento.
El siguiente código de ejemplo devuelve una señal que activa la función attributeChanged() cuando la parte cambia la posición inicial:
local part = workspace.Part
part:SetAttribute("InitialPosition", part.Position)
local function attributeChanged()
print("Attribute changed")
end
part:GetAttributeChangedSignal("InitialPosition"):Connect(attributeChanged)
También vea Instance.AttributeChanged que se activa siempre que se cambia cualquier atributo en la instancia.
Parámetros
El nombre del atributo especificado para el cual se está devolviendo el mensaje de cambio.
Devuelve
Un evento que se activa cuando cambia el atributo dado.
GetAttributes
Este método返回一个典型的键值对象,为每个属性的钥匙,值为一个非- nil 值。
Por ejemplo, el siguiente código de ejemplo muestra los atributos y valores de una instancia:
local part = workspace.Partpart:SetAttribute("InitialPosition", part.Position)part:SetAttribute("CanUse", true)for name, value in part:GetAttributes() doprint(name .. " = " .. value)end
También véase Instance:GetAttribute() que devuelve el valor que se ha asignado al atributo nombrado.
Devuelve
Un diccionario de parejas de cadenas para cada atributo donde la cadenas es el nombre del atributo y la vainilla es un valor no nulo.
GetChildren
Devuelve un arreglo (una tabla de índice numérico) que contiene todos los hijos directos de la instancia, o cada Instance cuyo Parent es igual al objeto. El arreglo se puede repetir al usar cualquier número o genérico para la repetición:
-- Ejemplo de bucle numéricolocal children = workspace:GetChildren()for i = 1, #children dolocal child = children[i]print(child.Name .. " is child number " .. i)end
-- Ejemplo genérico para-循环local children = workspace:GetChildren()for i, child in children doprint(child.Name .. " is child number " .. i)end
Los niños se ordenan por el orden en que se estableció su propiedad Parent al objeto.
También véase la función GetDescendants.
Devuelve
Un arreglo que contiene los hijos de la instancia.
Muestras de código
local children = workspace:GetChildren()
for i = 1, #children do
print(i, children[i].Name)
end
GetDebugId
Devuelve un valor de cadena codificado de el ID de diagnóstico usado internamente por Roblox.
Nota:
- Este artículo está protegido. Intentar usarlo en un Script o LocalScript causará un error
- Un ID de diagnóstico es un ID usado en los procesos de diagnóstico. Le permite a un debugger leer cada instrucción antes de que una aplicación la procese. Todos los objetos en Roblox actúan como procesos y cada instrucción de diagnóstico (o 'código' que se puede debugger si es necesario)
- Esto puede ser útil para los plugins que necesitan distinguir objetos similares uno de otro (como los objetos que comparten el mismo nombre)
Parámetros
La longitud del alcance.
Devuelve
La cadena de ID de diagnóstico.
Muestras de código
print(workspace:GetDebugId()) --> 39FA_12
print(workspace:GetDebugId(10)) --> 39FA2FEF4D_12
print(workspace:GetDebugId(math.huge)) --> 12
GetDescendants
Este método de objeto devuelve un arreglo que contiene todos los descendientes de ese objeto. A diferencia de Instance:GetChildren() , que solo devuelve los hijos inmediatos de un objeto, este método encuentra a todos los hijos del objeto, a todos los hijos de esos hijos y así sucesivamente.
Devuelve
Un matrón que contiene los descendientes de la instancia.
Muestras de código
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
Devuelve una cadena que describe el origen de la instancia. La cadena es una concatenación de la Name del objeto y sus ancestros, separados por periodos. El DataModel ( game ) no se considera. Por ejemplo, un 1> Class.Part
Cuando se llama a un Instance que no es un descendiente del DataModel, esta función considera todos los ancestros hasta y incluido el más antiguo sin un Parent .
Esta función es útil para registrar y debugger. No deberías intentar analizar la cadena devuelta para ninguna operación útil; esta función no escapa períodos (o cualquier otro símbolo) en los nombres de los objetos. En otras palabras, a pesar de que su salida a menudo parece ser un identificador de Lua válido, no está garantizado.
Devuelve
Muestras de código
-- 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
Este método devuelve un arreglo de las etiquetas aplicadas a la instancia dada, como cadenas. Puedes agregar etiquetas tanto en Studio en la ventana Propiedades o al tiempo de ejecución con AddTag() .
Este método es útil cuando quieres hacer algo con múltiples etiquetas en una instancia a la vez. Sin embargo, es ineficiente usar este método para verificar la existencia de una sola etiqueta; en cambio, usa HasTag() para verificar una etiqueta específica.
Devuelve
HasTag
Este método返回true si se ha añadido la etiqueta proporcionada a la propiedad del objeto. Puedes añadir etiquetas tanto en Studio en la ventana Propiedades como en tiempo de ejecución con AddTag() .
Parámetros
Devuelve
IsAncestorOf
Regresa true si un Instance es un ancestro del descendiente dado.
Un Instance es considerado el antepasado de un objeto si su Instance.Parent o uno de sus padres Instance.Parent está configurado como el 2>Class.Instance2> .
También, Instance:IsDescendantOf() .
Parámetros
Devuelve
Muestras de código
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
Regresa true si un Class.Instance es un antecesordel ancestral dado.
Un Instance se considera el descendiente de un objeto si el padre del instanciao uno de los padres del objeto está configurado para el objeto.
Nota, DataModel es un descendiente de nulo. Esto significa que IsDescendantOf no se puede usar con un parámetro de nulo para verificar si se ha eliminado un objeto.
También, Instance:IsAncestorOf() .
Parámetros
Devuelve
Muestras de código
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
Este método elimina una etiqueta de una instancia. No lanzará un error si el objeto no tiene la etiqueta. El éxito de la eliminación de una etiqueta creará una señal creada por CollectionService:GetInstanceRemovedSignal() con la etiqueta proporcionada.
Tenga en cuenta que al etiquetar una instancia, es común que se utilicen algunos recursos para proporcionar la funcionalidad de la etiqueta, por ejemplo, conexiones de eventos o tablas. Para evitar fugas de memoria, es una buena idea limpiar estos (desconectar, establecer a nil , etc.) cuando no es necesario para una etiqueta.
Parámetros
Devuelve
SetAttribute
Este método establece el atributo con el nombre dado a el valor dado. Si el valor dado es nil , el atributo será eliminado, ya que nil es devuelto por defecto.
Por ejemplo, el siguiente código muestra el atributo InicialPosition de la instancia a Vector3.new(0, 10, 0) :
local part = workspace.Partpart:SetAttribute("InitialPosition", Vector3.new(0, 10, 0))
Limitaciones
Requisitos y limitaciones de nomen:
- Los nombres solo deben usar caracteres alfanuméricos y signo de bajo.
- No se permiten espacios o símbolos únicos.
- Las cuerdas deben tener 100 caracteres o menos.
- No se permiten nombres que comienzan con RBX a menos que el orador sea un script de núcleo de Roblox (reservado para Roblox).
Al intentar asignar un atributo a un introducirno soportado, se producirá un error.
Véase también:
- Instance:GetAttribute() que devuelve el valor que se ha asignado al atributo nombrado.
- Instance:GetAttributes() que devuelve un diccionario de pares de valores de clave para cada uno de los atributos de la instancia.
Parámetros
El nombre del atributo que se está establecer.
El valor para establecer el atributo especificado.
Devuelve
WaitForChild
Devuelve el hijo de la Instance con el nombre dado. Si el hijo no existe, generará el hilo actual hasta que lo haga. Si se especifica el parámetro timeOut, este método se tiempoará después del número especificado de segundos y devolverá nil.
Uso primario
WaitForChild() es extremadamente importante cuando se trabaja en el código que se ejecuta por el cliente en un LocalScript . El motor de Roblox no garantiza el tiempo o el orden en que
Notas
- Esta función no se genera si un niño con el nombre dado existe cuando se hace la llamada.
- Instance:FindFirstChild() es una alternativa más eficiente a WaitForChild() para los objetos que se suponen que existen.
- Si una llamada a este método supera los 5 segundos sin返回,且 no se ha指定了 timeOut 参数,将打印警告,输出将可能永久生成。
Parámetros
El Instance.Name para buscar.
Un parámetro de tiempo opcional.
Devuelve
Muestras de código
local part = workspace:WaitForChild("Part")
print(part.Name .. " has been added to the Workspace")
Eventos
AncestryChanged
Activa cuando la propiedad Instance.Parent del objeto o uno de sus ancestros cambia.
Este evento incluye dos parámetros, hijo y padre. Hijo se refiere al 2> Class.Instance2> cuyo 5> Class.Instance.Parent5> fue cambiado en realidad. 8> Padre8> se refiere a este instanciade estudio's nuevo 1> Class.Instance.Parent1> .
Puedes usar este evento para rastrear la eliminación de una instancia en Studio, como la eliminación manual en el Explorador o a través de un complemento. Si necesitas detectar cuando se destruye una instancia usando Instance:Destroy() , usa el evento Instance.Destroying en su lugar.
Parámetros
El Instance cuyo Instance.Parent ha cambiado.
El nuevo Instance.Parent de la Instance cuyo Instance.Parent ha cambiado.
Muestras de código
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
Este evento se activa cuando se cambia cualquier atributo en la instancia, incluido cuando se establece un atributo en nil . El nombre del atributo cambiado se pasa a la función conectada.
Por ejemplo, el siguiente código conecta la función attributeChanged() para disparar siempre que uno de los atributos de la parte cambia:
local part = workspace.Part
local function attributeChanged(attributeName)
print(attributeName, "changed")
end
part.AttributeChanged:Connect(attributeChanged)
También se ve Instance:GetAttributeChangedSignal() que devuelve un evento que se activa cuando se cambia un atributo específico.
Parámetros
El nombre del atributo que se ha cambiado.
ChildAdded
Se activa después de que un objeto esté asociado a este Instance .
Nota, al usar esta función en un cliente para detectar objetos creados por el servidor, es necesario usar Instance:WaitForChild() al indexar los descendientes de este objeto. Esto se debe a que el objeto y sus descendientes no están garantizados de replicarse del servidor al cliente simultáneamente. Por ejemplo:
workspace.ChildAdded:Connect(function(child)
-- need to use WaitForChild as descendants may not have replicated yet
local head = child:WaitForChild("Head")
end)
Nota, esta función solo funciona para los hijos inmediatos de la Instance . Para una función que captura a todos los descendientes, usa Instance.DescendantAdded .
También, Instance.ChildRemoved .
Parámetros
Muestras de código
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
Dispara después de que se elimine un niño de este Instance .
Removed se refiere a cuando el padre de un objeto es cambiado de este Instance a algo más que esto Instance . Nota, este evento también se disparará cuando un hijo se destruya (usando Instance:Destroy() ) como la función de destrucción establece el padre de un objeto a cero.
Esta función solo funciona para los hijos inmediatos de la Instance . Para una función que captura a todos los descendientes, usa Instance.DescendantRemoving .
También see Instance.ChildAdded .
Parámetros
Muestras de código
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
El evento DescendantAdded se activa después de que se agregue un descendiente a la Instance .
Como descendiente, agrega fuegos para cada descendiente, la asociación de un objeto con el Instance disparará el evento para este objeto y todos sus descendientes individualmente.
Los desarrolladores solo se preocupan por los hijos inmediatos de la Instance deberían usar Instance.ChildAdded en su lugar.
También see Instance.DescendantRemoving .
Parámetros
Muestras de código
local function onDescendantAdded(descendant)
print(descendant)
end
workspace.DescendantAdded:Connect(onDescendantAdded)
local part = Instance.new("Part")
part.Parent = workspace
DescendantRemoving
Este evento se activa inmediatamente antes que el padre Instance cambie para que una instancia desciendente no sea una descendientemás. 1> Class.Instance:Destroy()|Destroy()1> cambia el padre de la instancia 4> Class.Instance.Parent|Parent4>
Dado que este evento se activa antes de la eliminación del descendiente, el padre del descendiente no cambiará en el momento de este evento de eliminación. Si el descendiente también es un hijo directo del padre, este evento se activará antes de Instance.ChildRemoved .
Si un descendiente tiene hijos, este evento se activa con el descendiente primero, seguido por sus descendientes.
Atención/advertencia
Este evento se activa con el objeto de descendencia que se está eliminando. Intentar establecer el Parent del descendiente a algo diferente fallará. A continuación, se muestra un ejemplo que demuestra esto:
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
También véase DescendantAdded .
Parámetros
Muestras de código
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
El Instance nunca se eliminará de la memoria mientras una función conectada todavía la está usando. Sin embargo, si la función se elimina en cualquier momento, el Instance y sus descendientes serán padreados a nil .
Si la propiedad Workspace.SignalBehavior está configurada como Enum.SignalBehavior.Immediate, este evento se activa inmediatamente antes de que la propiedad Instance o uno de sus antepasados se destruya con 1> Class.Instance:Destroy()1> .
Si la propiedad Workspace.SignalBehavior está configurada como Enum.SignalBehavior.Deferred, este evento se activa en el siguiente punto de reanudación, que será después de que la Class.Instance o uno de sus ancestros se destruya con Instance .
Con el comportamiento Deferred, conectar un script a su propio evento Instance.Destroying es problemático, ya que el script se destruirá antes de que se pueda llamar el llamado de retorno (lo que significa que no se ejecutará).
Al eliminar un Instance en Studio, como eliminar manualmente a través de Explorador o a través de un complemento, el Instance no se destruye. En cambio, el padre se establece en 2>nil2> que puedes rastrear con 5>Class.Instance.AncestryChanged5> .
Muestras de código
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())