Instance
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Instance jest podstawową klasą dla wszystkich klas w hierarchii klas Roblox, które mogą być częścią drzewa DataModel.
Nie można bezpośrednio utworzyć obiektów korzeniowych Instance, ale specjalny konstruktor Instance.new() tworzy obiekty za pomocą kodu, biorąc nazwę klasy jako parametr i zwracając utworzony obiekt.
Podsumowanie
Właściwości
Określa, czy Instance i jego potomkowie mogą być sklonowane za pomocą Instance:Clone() i czy można je zapisać/opublikować.
Zestaw możliwości, który może być używany do skryptów w tym pojemniku.
Niepowtarzalny identyfikator Instance .
Określa hierarchicznego rodzica Instance .
Właściwość przestarzała, która chroniła przedmioty CoreGui .
Przekształca instancję w pojemnik zabezpieczony.
Unikalny identyfikator dla instancja.
Metody
Zostosowuje tag do instancja.
Funkcja ta niszczy wszystkie dzieci instancja.
Twórz kopię instancji i wszystkich jej potomków, ignorując instancje, które nie są Archivable.
Ustawia właściwość Instance.Parent na nil, blokuje właściwość Instance.Parent i odłącza wszystkie połączenia, a następnie wzywa Destroy() na wszystkie dzieci.
Zwraca pierwszego przodka Instance którego Instance.Name jest równy podanej nazwie.
Zwraca pierwszego przodka Instance którego Object.ClassName jest równy podanemu className.
Zwraca pierwszego przodka Instance dla którego Object:IsA() zwraca prawdę dla danego klasera.
Zwraca pierwszego dziecka z Instance znalezionego z daną nazwą.
Zwraca pierwszego dziecka Instance którego ClassName jest równy podanej nazwie klasy.
Zwraca pierwszego dziecka z Instance dla którego Object:IsA() zwraca prawdę dla danego klasera.
Zwraca pierwszy potomek znaleziony za pomocą podanego Instance.Name .
Zwraca Actor powiązane z Instancją, jeśli istnieją.
Zwraca wartość, która została przypisana danemu nazwie atrybutu.
Zwraca wydarzenie, które wystrzeliwuje się, gdy dany atribut zmienia się.
Zwraca słownik atrybutów instancja.
Zwraca tablicę zawierającą wszystkie dzieci instancji.
Zwraca skodowany ciąg ID debugowania używany wewnętrznie przez Roblox.
Zwraca tablicę zawierającą wszystkie potomki instancja.
Zwraca ciąg opisujący przodków instancji.
Zdobywa array wszystkich tagów zastosowanych do instancja.
Sprawdź, czy instancja ma daną etykietę.
Wyświetla prawdę, jeśli Instance jest przodkiem danego potomka.
Wyświetla true jeśli Instance jest potomkiem danego przodka.
Wyświetla true, jeśli wartość przechowywana w określonej właściwości nie jest domyślna.
Usuwa tag z instancja.
Ustawia atrybut z daną nazwą na daną wartość.
Zwraca dziecko Instance z daną nazwą. Jeśli dziecko nie istnieje, wygeneruje obecny wątek, dopóki tak nie będzie.
Zdarzenia
Wypala się, gdy właściwość Instance.Parent przedmiotu lub jeden z jego przodków zostanie zmieniony.
Wyzwala ognie za każdym razem, gdy zmieniana jest atrybut na Instance.
Ogień po tym, jak obiekt zostanie przypisany do tego Instance .
Ogień po tym, jak dziecko zostanie usunięte z tego Instance .
Ogień po dodaniu potomka do Instance.
Ogień natychmiast przed usunięciem potomka Instance zostanie usunięty.
Ogień natychmiast przed (lub jest odkładany do czasu) zniszczeniem instancji za pomocą Instance:Destroy() .
Właściwości
Archivable
Właściwość ta decyduje, czy instancja powinna być uwzględniona, gdy publikowana jest lub zapisywana jest doświadczenie, lub gdy wezwany zostanie Clone() jeden z przodków instancji.Wezwanie bezpośrednio na instancji zwróci , jeśli ta instancja nie jest nie .
Kopiowanie obiektu w Studio za pomocą opcji Duplikuj lub Kopiuj / Wklej zignoruje jego własność Archivable i ustawi Archivable na true dla kopii.
local part = Instance.new("Part")print(part:Clone()) --> Partpart.Archivable = falseprint(part:Clone()) --> nil
Capabilities
Zestaw możliwości, który może być używany do skryptów w tej instancja.Aby funkcje weszły w życie, właściwość Instance.Sandboxed musi być włączona.
Właściwość ta jest używana przez eksperymentalną funkcja. Zobacz możliwości skryptu dla dalszych szczegółów.
Name
Niepowtarzalny identyfikator Instance .Nazwy są używane do utrzymania hierarchii obiektów w porządku, wraz z możliwością dostępu skryptów do konkretnych obiektów.Nazwa instancji nie może przekroczyć 100 znaków w rozmiarze.
Nazwa obiektu jest często używana do uzyskiwania dostępu do obiektu za pomocą hierarchii modelu danych za pomocą następujących metod:
local Workspace = game:GetService("Workspace")local baseplate = Workspace.Baseplatelocal baseplate = Workspace["Baseplate"]local baseplate = Workspace:FindFirstChild("BasePlate")
Aby uczynić obiekt dostępnym za pomocą operatora punktu ( . ), jego nazwa musi zaczynać się od podśladki lub litery, a reszta nazwy może zawierać tylko litery, cyfry lub podśladki (nie ma innych specjalnych znaków).Jeśli nazwa obiektu nie podąża za tą konwencją, nie będzie ona dostępna za pomocą operatora punktu i Luau nie zinterpretuje jej nazwy jako identyfikator.
Jeśli więcej niż jeden obiekt o tej samej nazwie są siostrami, każda próba indeksowania obiektu przez tę nazwę zwróci tylko jeden z obiektów, podobny do Instance:FindFirstChild(), ale nie zawsze pożądany obiekt.Jeśli konkretny obiekt musi być uzyskiwany za pomocą kodu, zaleca się nadanie mu unikalnej nazwy lub zagwarantowanie, że żaden z jego braci nie ma tej samej nazwy.
Zobacz także Instance:GetFullName() aby uzyskać pełną nazwę, w tym hierarchię obiektu.
Parent
Właściwość Parent określa hierarchicznego rodzica Instance .Poniższa terminologia jest powszechnie używana, gdy mówi się o tym, jak ta właściwość jest ustawiać:
Obiekt jest dzieckiem rodzica lub jest powiązany z innym obiektem , gdy jego zostanie ustawiony na ten obiekt.
Potomkowie z rodu z Instance są dziećmi tego obiektu, plus potomkami dzieci również.
Przodkowie z rodziny są wszystkimi obiektami, które instancja jest potomkiem.
Pochodzi z właściwości Parent wielu innych członków API, takich jak GetChildren() i FindFirstChild().Właściwość ta jest również używana do zarządzania tym, czy obiekt istnieje w doświadczeniu lub musi zostać usunięty.Dopóki rodzic obiektu jest w DataModel, jest przechowywany w zmiennej lub jest odwoływany przez właściwość innego obiektu, obiekt pozostaje w doświadczeniu; w przeciwnym razie obiekt zostanie automatycznie usunięty.
Wezwanie Destroy() ustawi Parent``Class.Instance i wszystkie jego potomki na nil , a także zamknie właściwość Parent.Wystąpi błąd podczas ustawiania Parent zniszczonego obiektu.
Nowo utworzone obiekty za pomocą Instance.new() nie będą miały rodzica i zwykle nie będą widoczne lub funkcjonować, dopóki nie zostanie ustawiać.
Replikacja obiektu
Obiekt utworzony przez serwer nie zostanie skopiowany do klientów, dopóki nie zostanie powiązany z jakimś obiektem, który jest skopiowany.Podczas tworzenia obiektu i ustawiania wielu właściwości zaleca się ustawienie właściwości Parent last .Zapewnia to, że obiekt replikuje się tylko raz, zamiast replikować wiele zmian właściwości.
local Workspace = game:GetService("Workspace")-- Wybierz ostatniego rodzica nowej instancji (zalecane)local part = Instance.new("Part")part.Position = Vector3.new(0, 10, 0)part.Parent = Workspace
Jeśli jednak części rodzicielskie zostaną przypisane do Model osoby, której rodzic jeszcze nie został ustawiony, dopuszczalne jest przypisanie każdej części do tego modelu, ponieważ model nie zostałby zreplikowany.
RobloxLocked
Właściwość ta służyła do ochrony obiektów w usłudze CoreGui przed zmianą przez użytkowników w nieautoryzowany sposób.Został wycofany i nie robi nic.
Sandboxed
Przekształca instancję w piaskownicowy kontener , funkcję eksperymentalną, która ogranicza działania, które skrypty w określonym pojemniku mogą wykonać.Zobacz możliwości skryptu dla dalszych szczegółów.
UniqueId
Unikalny identyfikator dla instancja, odróżniający się od Instance.Name, który nie musi być unikalny.
Metody
AddTag
Ta metoda zastosuje tag do instancja, bez efektu, jeśli tag został już zastosowany.Pomyślne dodanie tagu uruchomi sygnał stworzony przez CollectionService:GetInstanceAddedSignal() z danym tagiem.
Powiadomienia
Tagi instancji dodane po stronie klienta zostaną usunięte, jeśli serwer później dodaje lub usuwa tag na tej instancji, ponieważ serwer replikuje wszystkie tagi razem i zastępuje poprzednie tagi.
Podczas oznaczania instancjajest powszechne, że niektóre zasoby są używane do nadania tagowi jego funkcjonalności, na przykład połączenia z wydarzeniami lub tablice.Aby zapobiec wyciekom pamięci, dobrym pomysłem jest oczyszczenie ich (odłączenie, ustawienie na nil itp.), gdy nie są już potrzebne do tagu.Zrób to, gdy dzwonisz Instance:RemoveTag(), dzwonisz Instance:Destroy() lub w funkcji połączonej z sygnałem zwrotnym CollectionService:GetInstanceRemovedSignal().
Parametry
Zwroty
ClearAllChildren
Funkcja ta niszczy wszystkie dzieci i potomstwo instancja.
Jeśli nie chcesz niszczyć wszystkich dzieci i wnuków, użyj Instance:GetChildren() lub Instance:GetDescendants(), aby przejść przez te dzieci/wnuków i wybrać to, co należy zniszczyć.Na przykład następujący przykład kodu zniszczy wszystkie BaseParts spadające z Model :
local Workspace = game:GetService("Workspace")local model = Workspace:FindFirstChild("TestModel")for _, descendant in model:GetDescendants() doif descendant:IsA("BasePart") thendescendant:Destroy()endend
Zwroty
Przykłady kodu
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() tworzy kopię instancji i wszystkich jej potomków, ignorując wszystkie instancje, które nie są Archivable.Kopia głównej instancji jest zwracana przez tę metodę, a jej Parent jest ustawiona na nil .Zauważ, że jeśli sama instancja ma Archivable ustawioną na false, ta funkcja zwróci nil .
Jeśli właściwość odniesienia, takie jak ObjectValue.Value jest ustawiona w klonowanej instancja, wartość właściwości kopii zależy od wartości oryginału:
- Jeśli właściwość odniesienia odnosi się do instancji, która została również sklonowana , kopia odniesie się do kopii.
- Jeśli właściwość odniesienia odnosi się do obiektu, który nie został sklonowany , ta sama wartość jest utrzymywana w kopii.
Zwroty
Przykłady kodu
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
Ustawia właściwość Instance.Parent na nil, blokuje właściwość Instance.Parent i odłącza wszystkie połączenia, a następnie wzywa Destroy() na wszystkie dzieci.Funkcja ta jest poprawnym sposobem pozbycia się obiektów, które nie są już potrzebne.
Wyrzucanie niepotrzebnych obiektów jest ważne, ponieważ niepotrzebne obiekty i połączenia w miejscu zużywają pamięć, która może prowadzić do poważnych problemów z wydajnością z czasem.
Jako najlepsza praktyka po wezwaniu Destroy() na obiekcie ustaw każdą zmienną odnoszącą się do obiektu (lub jego potomków) na nil.Uniemożliwia to dostęp kodu do czegokolwiek, co ma wspólny z obiektem.
local part = Instance.new("Part")part.Name = "Hello, world"part:Destroy()-- Nie rób tego:print(part.Name) --> "Witaj, świat"-- Zrób to, aby zapobiec działaniu powyższej linii:part = nil
Po zniszczeniu przez tę metodę Instance, nie może być ponownie użyta, ponieważ właściwość Instance.Parent jest zablokowana.Aby tymczasowo usunąć obiekt zamiast go niszczyć, ustaw Parent na nil.Na przykład:
local Workspace = game:GetService("Workspace")object.Parent = niltask.wait(2)object.Parent = Workspace
Aby zniszczyć obiekt po upływie określonej ilości czasu, użyj Debris:AddItem().
Zwroty
Przykłady kodu
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
Zwraca pierwszego przodka Instance którego Instance.Name jest równy podanej nazwie.
Funkcja ta działa w górę, co oznacza, że zaczyna się od natychmiastowej instancji Instance.Parent i pracuje w kierunku DataModel.Jeśli nie znaleziono pasującego przodka, zwraca nil .
Poniższy kod snippet znajdzie pierwszego przodka obiektu o nazwie Car.
local car = object:FindFirstAncestor("Car")
Dla odmian tej funkcji, które znajdują przodków określonej klasy, patrz Instance:FindFirstAncestorOfClass() i Instance:FindFirstAncestorWhichIsA().
Parametry
The Instance.Name do poszukiwania.
Zwroty
FindFirstAncestorOfClass
Zwraca pierwszego przodka Instance którego Object.ClassName jest równy podanemu className.
Funkcja ta działa w górę, co oznacza, że zaczyna się od natychmiastowej instancji Instance.Parent i pracuje w kierunku DataModel.Jeśli nie znaleziono pasującego przodka, zwraca nil .
Powszechnym użyciem tej funkcji jest znalezienie Model należącego do BasePart . Na przykład:
local model = part:FindFirstAncestorOfClass("Model")
Funkcja ta jest wariantem Instance:FindFirstAncestor(), który sprawdza właściwość Object.ClassName zamiast Instance.Name.Instance:FindFirstAncestorWhichIsA() również istnieje, używając metody Object:IsA() zamiast szanować dziedziczenie klasy.
Parametry
The Object.ClassName do poszukiwania.
Zwroty
FindFirstAncestorWhichIsA
Zwraca pierwszego przodka Instance dla którego Object:IsA() zwraca prawdę dla danego klasera.
Funkcja ta działa w górę, co oznacza, że zaczyna się od natychmiastowej instancji Instance.Parent i pracuje w kierunku DataModel.Jeśli nie znaleziono pasującego przodka, zwraca nil .
W przeciwieństwie do Instance:FindFirstAncestorOfClass() , ta funkcja używa Object:IsA() , która respektuje dziedziczenie klasy. Na przykład:
print(part:IsA("Part")) --> trueprint(part:IsA("BasePart")) --> trueprint(part:IsA("Instance")) --> true
Dlatego następujący przykład kodu zwróci pierwszy BasePart przodek, niezależnie od tego, czy jest to WedgePart , MeshPart lub Part.
local part = object:FindFirstAncestorWhichIsA("BasePart")
Zobacz też Instance:FindFirstAncestor().
Parametry
The Object.ClassName do poszukiwania.
Zwroty
FindFirstChild
Zwraca pierwszego dziecka Instance z daną nazwą lub nil jeśli nie istnieje takie dziecko.Jeśli opcjonalny argument recursive jest true, ta funkcja przeszukuje wszystkie potomki, a nie tylko bezpośrednie dzieci Instance.
Sprawdzanie istnienia obiektu
FindFirstChild() jest konieczne, jeśli musisz zweryfikować, czy obiekt istnieje przed kontynuacją.Próba indeksowania dziecka za pomocą operatora dot wyświetla błąd, jeśli dziecko nie istnieje.
local Workspace = game:GetService("Workspace")-- Następujące błędy linii, jeśli część nie istnieje w przestrzeni roboczejWorkspace.Part.Transparency = 0.5
Użyj FindFirstChild() , aby najpierw sprawdzić Part , a następnie użyj oświadczenia if , aby uruchomić kod, który go potrzebuje.
local Workspace = game:GetService("Workspace")local part = Workspace:FindFirstChild("Part")if part thenpart.Transparency = 0.5end
Wyszukiwanie dziecka, którego nazwa pasuje do właściwości
Czasami Name przedmiotu jest taki sam jak właściwość jego Parent .Podczas używania operatora punktu właściwości mają pierwszeństwo przed dziećmi, jeśli dzielą nazwę.
W następnym przykładzie dodano Folder o nazwie "Kolor" do Part, który ma również właściwość Part.Color.Part.Color odnosi się do Color3 , a nie do katalogu.
local part = Instance.new("Part")local folder = Instance.new("Folder")folder.Name = "Color"folder.Parent = partlocal c = part.Color --> Kolor 3local c2 = part:FindFirstChild("Color") --> The Folder
Korzyścią z użycia FindFirstChild() w ten sposób jest to, że wprowadzenie nowych właściwości nie narzuca ryzyka dla twojego kodu.
Notatki o wydajności
FindFirstChild() trwa około 20% dłużej niż użycie operatora punktu i prawie 8 razy dłużej niż po prostu przechowywanie odniesienia do obiektu.Dlatego powinieneś unikać wezwania go w kodzie zależnym od wydajności, takim jak w ciasnych pętlach lub funkcjach połączonych z RunService.Heartbeat i RunService.PreRender.Zamiast tego przechowaj wynik w zmiennej lub rozważ użycie ChildAdded lub WaitForChild() , aby wykryć, kiedy dziecko określonej nazwy stanie się dostępne.
Parametry
The Instance.Name do wyszukania.
Czy wyszukiwanie powinno być przeprowadzane recursywnie, czy nie.
Zwroty
Przykłady kodu
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
Zwraca pierwszego dziecka z Instance, którego ClassName jest równe podanemu className.W przeciwieństwie do Instance:FindFirstChildWhichIsA(), ta funkcja zwraca tylko obiekty, których klasa odpowiada className, ignorując dziedziczenie klasy.Jeśli nie znaleziono pasującego dziecka, ta funkcja zwraca nil .
Parametry
The Object.ClassName do poszukiwania.
Zwroty
Przykłady kodu
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
Zwraca pierwszego dziecka z Instance dla którego Object:IsA() zwraca prawdę dla danego klasera.
Jeśli nie znaleziono pasującego dziecka, ta funkcja zwraca nil .Jeśli opcjonalny argument recursywny jest prawdziwy, ta funkcja przeszukuje wszystkie potomki, a nie tylko bezpośrednie dzieci Instance.
W przeciwieństwie do Instance:FindFirstChildOfClass() , ta funkcja używa Object:IsA() , która respektuje dziedziczenie klasy. Na przykład:
print(part:IsA("Part")) --> prawdaprint(part:IsA("BasePart")) --> prawdaprint(part:IsA("Instance")) --> true
Dlatego następny przykład kodu zwróci pierwsze dziecko BasePart , niezależnie od tego, czy jest to WedgePart , MeshPart lub Part.
local part = object:FindFirstChildWhichIsA("BasePart")
Rozwijający się programiści szukający dziecka według nazwy, powinni używać Instance:FindFirstChild() zamiast.
Parametry
The Object.ClassName do wyszukania.
Czy wyszukiwanie powinno być przeprowadzane recursywnie, czy nie.
Zwroty
FindFirstDescendant
Zwraca pierwszy potomek znaleziony za pomocą podanego Instance.Name .
Ta metoda jest wyłączona i nie może być używana.Aby znaleźć pierwszy potomek instancja, rozważ użycie parametru recursive zamiast tego na Instance:FindFirstChild().
Parametry
The Instance.Name do wyszukiwania.
Zwroty
GetActor
Jeśli Instance jest Actor, samo Actor jest zwracane.W przeciwnym razie jego najbliższy przodek Actor zostanie zwrócony.Jeśli żaden przodek nie jest Actor, wynikiem jest nil .
Zwroty
GetAttribute
Ta metoda zwraca wartość, która została przypisana danemu nazwie atrybutu. Jeśli nie został przypisany żaden atrybut, zostanie zwrócona nil.
Na przykład następujący kod snippet ustawia i następnie otrzymuje wartość atrybutu instancjaInitialPosition:
local Workspace = game:GetService("Workspace")local part = Workspace.Partpart:SetAttribute("InitialPosition", part.Position)local initialPosition = instance:GetAttribute("InitialPosition")print(initialPosition)
Zobacz także
- Instance:SetAttribute() który ustawia atrybut z daną nazwą na daną wartość.
- Instance:GetAttributes() który zwraca słownik par kluczowo-wartościowych dla każdego z atrybutów instancja.
Parametry
Nazwa atrybutu, który jest odzyskiwany.
Zwroty
Wartość, która została przypisana do określonej nazwy atrybutu. Jeśli nie został przypisany żaden atrybut, zostanie zwrócona nil.
GetAttributeChangedSignal
Funkcja ta zwraca wydarzenie, które zachowuje się dokładnie tak, jak wydarzenie Changed, z wyjątkiem tego, że wystrzeliwuje tylko wtedy, gdy zmienia się określony przypisany atut; skutecznie jest podobny do GetPropertyChangedSignal() , ale dla przypisów.
Ogólnie dobrym pomysłem jest użycie tej metody zamiast połączenia z Changed z funkcją, która sprawdza nazwę atrybutu.Następne wezwania do tej metody na tym samym obiekcie z tym samym nazwą atrybutu zwracają to samo wydarzenie.
Poniższy przykład kodu zwraca sygnał, który uruchamia funkcję attributeChanged(), gdy zmienia się atrybut części InitialPosition:
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)
Zobacz także Instance.AttributeChanged, który wystrzeliwuje za każdym razem, gdy zmieniany jest którykolwiek atribut na instancja.
Parametry
Nazwa określonego atrybutu, dla którego sygnał zmiany jest zwracany.
Zwroty
Wydarzenie, które wystrzeliwuje się, gdy zmieniony zostanie określony atribut.
GetAttributes
Ta metoda zwraca słownik pary klucz-wartość dla każdego atrybutu, w którym klucz jest nazwą atrybutu, a wartość jest nie nil wartością.
Na przykład następujący kod snippet wyświetla atrybuty i wartości instancja:
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
Zobacz także Instance:GetAttribute(), który zwraca wartość, która została przypisana danemu nazwie atrybutu.
Zwroty
Słownik pary strun → dla każdej atrybutu, w której struna jest nazwą atrybutu, a variant jest wartością nieujęlną.
GetChildren
Zwraca tablicę (indeksowaną liczbowo) zawierającą wszystkie bezpośrednie dzieci instancji lub każdą Instance, której Parent jest równa obiektowi.Matryca może być powtarzana za pomocą dowolnego numerowego lub ogólnego cyklu for:
local Workspace = game:GetService("Workspace")-- Przykład pętli liczbowejlocal children = Workspace:GetChildren()for i = 1, #children dolocal child = children[i]print(child.Name .. " is child number " .. i)end
local Workspace = game:GetService("Workspace")-- Przykład pętli generycznejlocal children = Workspace:GetChildren()for i, child in children doprint(child.Name .. " is child number " .. i)end
Dzieci są sortowane według kolejności, w której ich właściwość Parent została ustawiona na obiekt.
Zobacz także funkcję GetDescendants.
Zwroty
Zbiór zawierający dzieci instancji.
Przykłady kodu
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
Zwraca skodowany ciąg ID debugowania używany wewnętrznie przez Roblox. Zauważ, że:
- Ten przedmiot jest chroniony. Spróba jego użycia w Script lub LocalScript spowoduje błąd.
- ID debugowania to identyfikator używany w procesach debugowania.Umożliwia debuggerowi odczytanie każdej instrukcji przed przetworzeniem jej przez aplikację.Wszystkie obiekty w Roblox działają jak procesy i każde instrukcje uruchamiania (lub "kod"), które mogą być debugowane, jeśli jest to konieczne.
- Może to być pomocne dla pluginów, które muszą odróżniać podobne obiekty od siebie (takie jak obiekty, które dzielą tę samą nazwę).
Parametry
Długość zakresu.
Zwroty
Sznurek ID ciąg.
Przykłady kodu
print(workspace:GetDebugId()) --> 39FA_12
print(workspace:GetDebugId(10)) --> 39FA2FEF4D_12
print(workspace:GetDebugId(math.huge)) --> 12
GetDescendants
Metoda obiektu tego powraca array, który zawiera wszystkie potomki tego obiektu.W przeciwieństwie do Instance:GetChildren(), który zwraca tylko bezpośrednie dzieci obiektu, ta metoda znajduje każde dziecko obiektu, każde dziecko tych dzieci i tak dalej.
Zwroty
Zbiór zawierający potomków instancji.
Przykłady kodu
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
Zwraca ciąg opisujący przodków instancji.Sznurek to konkatenacja Name obiektu i jego przodków, oddzielona przecinkami.The DataModel ( game ) nie jest rozważany.Na przykład Part w Workspace może zwrócić Workspace.Part .
Gdy wezwano na Instance, który nie jest potomkiem DataModel, ta funkcja rozważa wszystkich przodków do i włącznie do najwyższego bez Parent.
Funkcja ta jest przydatna do rejestrowania i debugowania.Nie powinieneś próbować analizować zwróconej struny dla jakiejkolwiek użytecznej operacji; ta funkcja nie ucieka okresów (lub jakiegokolwiek innego symbolu) w nazwach obiektów.Innymi słowy, choć jego wynik często wydaje się być ważnym identyfikatorem Luau, nie jest on gwarantowany.
Zwroty
Przykłady kodu
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
Parametry
Zwroty
GetTags
Ta metoda zwraca tablicę tagów zastosowanych do danego instancja, jako ciągi.Możesz dodawać tagi w Studio w oknie Właściwości lub podczas uruchamiania z AddTag() .
Ta metoda jest przydatna, gdy chcesz zrobić coś z wieloma tagami na instancji naraz.Jednak nieefektywne jest używanie tej metody do sprawdzenia istnienia pojedynczej etykiety; zamiast tego użyj HasTag(), aby sprawdzić konkretną etykietę.
Zwroty
HasTag
Ta metoda zwraca true, jeśli dostarczony tag został dodany do obiektu.Możesz dodawać tagi w Studio w oknie Właściwości lub podczas uruchamiania z AddTag() .
Parametry
Zwroty
IsAncestorOf
Wyświetla prawdę, jeśli Instance jest przodkiem danego potomka.
An Instance jest uważany za przodka obiektu, jeśli obiekt Instance.Parent lub jeden z jego rodziców Instance.Parent jest ustawiony na Instance.
Zobacz także, Instance:IsDescendantOf() .
Parametry
Zwroty
Przykłady kodu
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
Wyświetla true jeśli Instance jest potomkiem danego przodka.
Zauważ, że IsDescendantOf() nie może być używany z parametrem nil do sprawdzenia, czy obiekt został usunięty.
Zobacz też Instance:IsAncestorOf().
Parametry
Zwroty
Przykłady kodu
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
Wyświetla true, jeśli wartość przechowywana w określonej właściwości nie jest domyślna.Na przykład, jeśli wyświetlanie właściwości Rotation właściwości TextLabel wskazuje 0 , to wezwanie IsPropertyModified("Rotation") na etykiecie zwróci false , ponieważ 0 jest domyślną wartością dla TextLabel.Rotation .
Parametry
Zwroty
Boolean wskazujący, czy właściwość została zmieniona.
RemoveTag
Ta metoda usuwa tag z instancja.Nie wyśle błędu, jeśli obiekt nie ma tagu.Pomyślne usunięcie tagu uruchomi sygnał stworzony przez CollectionService:GetInstanceRemovedSignal() z danym tagiem.
Zauważ, że podczas oznaczania instancjajest powszechne, że niektóre zasoby są używane do nadania tagowi jego funkcjonalności, na przykład połączenia z wydarzeniami lub tablice.Aby zapobiec wyciekom pamięci, dobrym pomysłem jest oczyszczenie ich (odłączenie, ustawienie na nil itp.), gdy nie są już potrzebne do tagu.
Parametry
Zwroty
ResetPropertyToDefault
Zresetuj właściwość do jej domyślnej wartości.Na przykład wezwanie ResetPropertyToDefault("Rotation") na TextLabel jest równoznaczne z ustawieniem jego Rotation na 0 (domyślną wartość właściwości).
Parametry
Zwroty
SetAttribute
Ta metoda ustawia atrybut z daną nazwą na daną wartość.Jeśli wartość podana jest nil, atrybut zostanie usunięty, ponieważ nil zostanie zwrócony domyślnie.
Na przykład następujący kod snippet ustawia atrybut instancjaInitialPosition na Vector3.new(0, 10, 0) :
local Workspace = game:GetService("Workspace")local part = Workspace.Partpart:SetAttribute("InitialPosition", Vector3.new(0, 10, 0))
Ograniczenia
Wymagania i ograniczenia nazywania:
- Nazwy mogą używać tylko znaków alfanumerycznych i podświetlenia.
- Nie są dozwolone spacje ani unikalne symbole.
- Sznurki muszą mieć mniej niż 100 znaków.
- Nazwy nie mogą zaczynać się od RBX , chyba że wezwający jest skryptem rdzenia Roblox (przeznaczonym dla Roblox).
Podczas próby ustawienia atrybutu do niedopuszczonego wpisywaćzostanie wyświetlony błąd.
Zobacz także
- Instance:GetAttribute() który zwraca wartość, która została przypisana danemu nazwie atrybutu.
- Instance:GetAttributes() który zwraca słownik par kluczowo-wartościowych dla każdego z atrybutów instancja.
Parametry
Nazwa atrybutu, który jest ustawiać.
Wartość do ustawienia określonego atrybutu.
Zwroty
WaitForChild
Zwraca dziecko z Instance z daną nazwą.Jeśli dziecko nie istnieje, wygeneruje obecny wątek, dopóki tak nie zrobi.Jeśli parametr timeOut zostanie określony, metoda ta wygaśnie po określonej liczbie sekund i zwróci nil .
Główne wykorzystanie
WaitForChild() jest niezwykle ważne podczas pracy nad kodem uruchamianym przez klienta w LocalScript .Silnik Roblox nie gwarantuje czasu lub kolejności, w której obiekty są replikowane z serwera na klienta.Ponadto, jeśli doświadczenie ma Workspace.StreamingEnabled ustawione na prawdę, BaseParts znajdujące się daleko od postaci gracza mogą nie być przesyłane do klienta, co może spowodować, że skrypty złamią się podczas indeksowania obiektów, które jeszcze nie istnieją na klientzie.
Notatki
- Funkcja ta nie zwraca, jeśli dziecko z daną nazwą istnieje, gdy wezwanie zostanie wykonane.
- Instance:FindFirstChild() jest bardziej wydajną alternatywą dla WaitForChild() dla obiektów, które są domniemane istniejące.
- Jeśli wezwanie do tej metody przekroczy 5 sekund bez zwrotu i nie zostanie określony żaden parametr timeOut, otrzymasz ostrzeżenie o tym, że wątek może wydawać się nieskończony.
Parametry
The Instance.Name do poszukiwania.
Opcjonalny parametr czasu wygaśnięcia.
Zwroty
Przykłady kodu
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")
Zdarzenia
AncestryChanged
Wypala się, gdy właściwość Instance.Parent przedmiotu lub jeden z jego przodków zostanie zmieniony.
To wydarzenie obejmuje dwa parametry: child odnosi się do Instance którego Instance.Parent rzeczywiście zmieniono, podczas gdy parent odnosi się do nowego Instance.Parent tej instancja.
Możesz użyć tego wydarzenia do śledzenia usuwania instancji w Studio, takich jak ręczne usuwanie w Explorerze lub za pomocą dodatek plug-in.Jeśli musisz wykryć, kiedy instancja zostanie zniszczona za pomocą Instance:Destroy(), użyj wydarzenia Instance.Destroying zamiast tego.
Parametry
The Instance którego Instance.Parent zostało zmienione.
Nowa Instance.Parent z Instance której Instance.Parent zmieniono.
Przykłady kodu
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
To wydarzenie wystrzeliwuje się za każdym razem, gdy zmieniany jest którykolwiek atribut na instancja, w tym gdy atut jest ustawiony na nil.Nazwa zmienionego atrybutu jest przekazywana do połączonej funkcji.
Na przykład następujący kod snippet połącza funkcję attributeChanged() z uruchomieniem za każdym razem, gdy jeden z atrybutów części zmieni się:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local function attributeChanged(attributeName)
print(attributeName, "changed")
end
part.AttributeChanged:Connect(attributeChanged)
Zobacz także Instance:GetAttributeChangedSignal(), który zwraca wydarzenie, które wystrzeliwuje się, gdy zmieni się określony daną atrybutem.
Parametry
Nazwa atrybutu, który został zmieniony.
ChildAdded
Ogień po tym, jak obiekt zostanie przypisany do tego Instance .
Zauważ, gdy używasz tej funkcji na klientzie do wykrywania obiektów stworzonych przez serwer, konieczne jest użycie Instance:WaitForChild() podczas indeksowania potomków tych obiektów.Dzieje się tak, ponieważ obiekt i jego potomkowie nie są gwarantowane do odtwarzania jednocześnie z serwera na klienta.Na przykład:
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)
Uwaga, ta funkcja działa tylko dla bezpośrednich dzieci Instance . Dla funkcji, która rejestruje wszystkie potomki, użyj Instance.DescendantAdded .
Zobacz też Instance.ChildRemoved.
Parametry
Przykłady kodu
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
Ogień po tym, jak dziecko zostanie usunięte z tego Instance .
Usunięto odnosi się do momentu, w którym rodzic obiektu zostaje zmieniony z tego Instance na coś innego niż to Instance.Uwaga: to wydarzenie zostanie uruchomione również, gdy dziecko zostanie usunięte (za pomocą Instance:Destroy() ), ponieważ funkcja destroy ustawia rodzica obiektu na nil .
Ta funkcja działa tylko dla bezpośrednich dzieci Instance . Dla funkcji, która rejestruje wszystkie potomki, użyj Instance.DescendantRemoving .
Zobacz też Instance.ChildAdded.
Parametry
Przykłady kodu
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
To wydarzenie wystrzeliwuje po dodaniu potomka do Instance.
Gdy strzela dla każdego potomka, opiekowanie się obiektem do Instance spowoduje uruchomienie wydarzenia dla tego obiektu i wszystkich jego potomków indywidualnie.
Jeśli jesteś zainteresowany tylko bezpośrednimi dziećmi z >, użyj > zamiast tego.
Zobacz też Instance.DescendantRemoving.
Parametry
Przykłady kodu
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
To wydarzenie uruchamia natychmiast przed zmianami rodzica Instance, tak że instancja potomka nie będzie już potomką.Destroy() zmienia instancję Parent na nil, więc wezwanie tej metody u potomka rodzica spowoduje uruchomienie tego wydarzenia.
Ponieważ to wydarzenie wystrzeliwuje przed usunięciem potomka, rodzic potomka pozostanie niezmieniony w czasie wystrzeliwania tego wydarzenia.Jeśli potomek jest również bezpośrednim dzieckiem rodzica, wydarzenie to wystrzeli przed .
Jeśli potomek ma dzieci, to wydarzenie uruchamia się najpierw z potomkiem, a następnie jego potomkami.
Ostrzeżenie
To wydarzenie wystrzeliwuje z obiektem potomnym, który jest usuwany.Próba ustawienia Parent syna na coś innego nie powiedzie się.Poniżej jest przykład, który to pokazuje:
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
Zobacz też DescendantAdded.
Parametry
Przykłady kodu
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
Instance nigdy nie zostanie usunięty z pamięci, gdy połączona funkcja nadal go używa.Jeśli jednak funkcja zostanie wywołana w dowolnym momencie, Instance i jej potomkowie zostaną przypisane do nil .
Jeśli właściwość Workspace.SignalBehavior jest ustawiona na Enum.SignalBehavior.Immediate, to wydarzenie uruchamia się natychmiast przed zniszczeniem Instance lub jednego z jego przodków za pomocą Instance:Destroy().
Jeśli właściwość Workspace.SignalBehavior jest ustawiona na Enum.SignalBehavior.Deferred, wydarzenie to wystrzeli w następnym punkcie wznowienia, który nastąpi po zniszczeniu Instance lub jednego z jego przodków za pomocą Instance:Destroy().
Z zachowaniem Deferred, połączenie skryptu z jego własnym wydarzeniem Instance.Destroying jest problematyczne, ponieważ skrypt zostanie usunięty przed wezwaniem powrotu (co oznacza, że nie zostanie wykonany).
Podczas usuwania Instance w Studio, takiego jak ręczne usuwanie za pomocą Explorer lub za pomocą dodatek plug-in, Instance nie jest niszczony.Zamiast tego rodzic jest ustawiony na nil, który możesz śledzić za pomocą Instance.AncestryChanged.
Przykłady kodu
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())