Блог школы Роблоппа — Роблокс Студио, обучение, познавательные статьи и новости школы

Как использовать GetDescendants() в Роблокс Студио

2025-12-01 13:05 Документация
GetDescendants() — это один из самых полезных методов в Роблокс Студио. Он позволяет получить все объекты внутри модели, включая дочерние, их дочерние объекты, вложенные папки и любые элементы на любом уровне вложенности.
Если вы работаете с большими моделями, NPC, инструментами, картами или GUI — GetDescendants() делает работу проще, чем стандартный GetChildren().
В этой статье мы разберём, что делает GetDescendants(), чем он отличается от других методов, и приведём примеры использования в реальных задачах.

1. Что такое GetDescendants()?

Метод: object:GetDescendants() возвращает массив всех объектов, находящихся внутри объекта на любом уровне вложенности.
То есть:
GetChildren() возвращает только объекты 1 уровня (прямые дети)
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

GetDescendants()

Возвращает ВСЁ:
Model
├── 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
end

5. Производительность: важные советы

GetDescendants() может возвращать сотни или тысячи объектов, поэтому:

🎯 Советы:

  • Используйте его один раз, а не в цикле
  • Сохраняйте результат в переменную
  • Не вызывайте его в RunService.Heartbeat
  • Для повторных проверок используйте события (ChildAdded, ChildRemoved)
Пример эффективного кода:
local parts = model:GetDescendants()
for _, part in ipairs(parts) do
-- работа с объектом
end

6. Итог

GetDescendants() — это универсальный инструмент для работы с большими моделями и сложными структурами. Он позволяет:
  • быстро находить все объекты внутри модели
  • массово изменять свойства
  • работать с вложенными структурами
  • писать гибкие и компактные скрипты
Если вы делаете NPC, карты, GUI, декорации или сложные системы — GetDescendants() станет одним из ваших главных помощников.

Хочешь лучше разбираться в Roblox Studio и писать крутые скрипты?

Если тебе нравится делать свои игры, придумывать механики и узнавать, как работают команды вроде GetDescendants(), то тебе точно подойдёт курс по программированию для детей в Роблокс Студио.
На занятиях ты:
  • научишься создавать собственные игры с нуля;
  • разберёшься, как работают объекты, события и скрипты;
  • будешь применять Lua в реальных проектах;
  • сможешь делать NPC, ловушки, кнопки, эффекты, GUI и многое другое;
  • сделаешь свою игру, которой можно гордиться.
Если хочешь научиться программировать и стать настоящим разработчиком Roblox — переходи на сайт: