GetDescendants() — это один из самых полезных методов в Роблокс Студио. Он позволяет получить все объекты внутри модели, включая дочерние, их дочерние объекты, вложенные папки и любые элементы на любом уровне вложенности.
Если вы работаете с большими моделями, NPC, инструментами, картами или GUI — GetDescendants() делает работу проще, чем стандартный GetChildren().
В этой статье мы разберём, что делает GetDescendants(), чем он отличается от других методов, и приведём примеры использования в реальных задачах.
1. Что такое GetDescendants()?
Метод: object:GetDescendants() возвращает массив всех объектов, находящихся внутри объекта на любом уровне вложенности.
То есть:
GetChildren() возвращает только объекты 1 уровня (прямые дети)
GetDescendants() возвращает всех потомков, включая:
GetDescendants() возвращает всех потомков, включая:
- детей
- внуков
- правнуков
- папки и объекты внутри них
Это мощный метод для поиска и массовой обработки объектов.
2. Простой пример использования
Допустим, у вас есть модель с кучей деталей, и вы хотите сделать их прозрачными.
local model = workspace.House
for _, obj in ipairs(model:GetDescendants()) do
if obj:IsA("BasePart") then
obj.Transparency = 0.5
end
endЭтот код переберёт абсолютно все детали дома, даже если они находятся глубоко в папках.
3. Отличие от GetChildren()
GetChildren()
Возвращает только прямых детей объекта:
Model
├── Part
├── Folder
└── Script
├── Part
├── Folder
└── Script
GetDescendants()
Возвращает ВСЁ:
Model
├── Part
├── Folder
│ ├── Part
│ └── Light
└── Script
├── Part
├── Folder
│ ├── Part
│ └── Light
└── Script
Если внутри модели есть вложенная структура — используйте GetDescendants().
4. Частые сценарии применения GetDescendants()
✔ 4.1. Назначить CollisionGroup всем частям NPC
Идеально для коллизий:
local npc = workspace.NPC
for _, obj in ipairs(npc:GetDescendants()) do
if obj:IsA("BasePart") then
obj.CollisionGroup = "NPC"
end
end✔ 4.2. Удалить все скрипты внутри модели
for _, obj in ipairs(workspace.Model:GetDescendants()) do
if obj:IsA("Script") or obj:IsA("LocalScript") then
obj:Destroy()
end
end✔ 4.3. Найти все GUI-элементы
local gui = player.PlayerGui.ScreenGui
for _, obj in ipairs(gui:GetDescendants()) do
if obj:IsA("TextLabel") then
obj.TextColor3 = Color3.fromRGB(255, 255, 0)
end
end✔ 4.4. Включить/выключить все эффекты внутри модели
for _, effect in ipairs(model:GetDescendants()) do
if effect:IsA("ParticleEmitter") then
effect.Enabled = false
end
end✔ 4.5. Массово изменить свойства Terrain, декораций или карты
Например — отключить CanCollide у всех Part:
for _, part in ipairs(workspace.Map:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = false
end
end5. Производительность: важные советы
GetDescendants() может возвращать сотни или тысячи объектов, поэтому:
🎯 Советы:
- Используйте его один раз, а не в цикле
- Сохраняйте результат в переменную
- Не вызывайте его в RunService.Heartbeat
- Для повторных проверок используйте события (ChildAdded, ChildRemoved)
Пример эффективного кода:
local parts = model:GetDescendants()
for _, part in ipairs(parts) do
-- работа с объектом
end6. Итог
GetDescendants() — это универсальный инструмент для работы с большими моделями и сложными структурами. Он позволяет:
- быстро находить все объекты внутри модели
- массово изменять свойства
- работать с вложенными структурами
- писать гибкие и компактные скрипты
Если вы делаете NPC, карты, GUI, декорации или сложные системы — GetDescendants() станет одним из ваших главных помощников.
Хочешь лучше разбираться в Roblox Studio и писать крутые скрипты?
Если тебе нравится делать свои игры, придумывать механики и узнавать, как работают команды вроде GetDescendants(), то тебе точно подойдёт курс по программированию для детей в Роблокс Студио.
На занятиях ты:
- научишься создавать собственные игры с нуля;
- разберёшься, как работают объекты, события и скрипты;
- будешь применять Lua в реальных проектах;
- сможешь делать NPC, ловушки, кнопки, эффекты, GUI и многое другое;
- сделаешь свою игру, которой можно гордиться.
Если хочешь научиться программировать и стать настоящим разработчиком Roblox — переходи на сайт:
