Если вы когда-нибудь писали скрипт в Роблокс Студио и получили ошибку вроде
attempt to index nil with 'Humanoid'
— значит, вы пытались обратиться к объекту, который ещё не успел загрузиться.
Именно для таких случаев существует команда WaitForChild().
💡 Что такое WaitForChild()
WaitForChild() — это функция, которая ждёт, пока нужный объект появится в иерархии.
Она спасает скрипты от ошибок, связанных с тем, что объект загружается чуть позже, чем сам скрипт начинает выполняться.
🔍 Пример без WaitForChild()
local player = game.Players.LocalPlayer
local character = player.Character
local humanoid = character:FindFirstChild("Humanoid")
humanoid.Health = 0❌ Иногда этот код выдаёт ошибку, потому что Character или Humanoid ещё не успели появиться.
Скрипт выполняется слишком быстро — раньше, чем Roblox загрузил модель игрока.
✅ Правильный вариант с WaitForChild()
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
humanoid.Health = 0Теперь скрипт ждёт появления Humanoid перед тем, как к нему обратиться.
Ошибка исчезнет даже при медленной загрузке.
⚙️ Где чаще всего используют WaitForChild()
- При работе с персонажем игрока
- Чтобы получить Humanoid, HumanoidRootPart, Torso и другие части модели.
- При работе с GUI
- Иногда интерфейс в PlayerGui загружается позже —
- особенно, если скрипт находится в StarterPlayerScripts.
local player = game.Players.LocalPlayer
local gui = player:WaitForChild("PlayerGui")
local menu = gui:WaitForChild("MainMenu")- В серверных скриптах
- Когда нужно дождаться появления объекта в Workspace после спавна.
local npc = workspace:WaitForChild("NPC")
local head = npc:WaitForChild("Head")🧠 Почему просто FindFirstChild() не всегда помогает
FindFirstChild() проверяет наличие объекта,
но не ждёт, если его нет.
local humanoid = character:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
endТакой код безопасен, но если Humanoid появится через секунду —
скрипт уже не сработает.
WaitForChild() решает эту проблему, приостанавливая скрипт до появления объекта.
⚠️ Важно знать
WaitForChild() может ждать бесконечно, если указанный объект никогда не появится.
Чтобы этого избежать, можно указать второй параметр — время ожидания (в секундах):
local tool = player.Backpack:WaitForChild("Sword", 5)
if tool then
print("Меч найден!")
else
warn("Меч не появился в течение 5 секунд.")
end💬 Подведём итоги
Что делаетПример
Ждёт появления объекта
local obj = parent:WaitForChild("Part")
Можно задать время ожидания
:WaitForChild("Part", 5)
Предотвращает ошибки nil
Да
Работает везде — GUI, игроки, объекты
📦 Полезные ссылки
🎮 Хочешь научиться писать надёжные скрипты без ошибок и делать настоящие игры в Роблокс Студио?
👉 Записывайся на занятия на roblo.ru — учись создавать, тестировать и отлаживать код вместе с нами!
