Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помощь в Roblox studio

Дмитрий Чапчиков Знаток (350), на голосовании 1 месяц назад
В общем дело такое, пытаюсь сделать главное меню, но оно работает через раз, заходишь 1 раз, всё в порядке, перезаходишь и случается такое:
Нормальный:Поломанный:Второе попадается редко, но всё же мозолит.
Сам скрипт:Сюда ещё добавил зафиксировать движение чтобы игрок не смог игру пройти не глядя, но сразу скажу, убрав это ситуация не меняется
Голосование за лучший ответ
Frelinq Знаток (414) 2 месяца назад
Проблема в том, что ваш скрипт полагается на WaitForChild для поиска Humanoid. WaitForChild ожидает появления объекта, но если Humanoid уже существует, когда скрипт запускается, то WaitForChild может работать некорректно. Это приводит к непредсказуемому поведению, особенно при повторных запусках игры. Кроме того, PlayButton:Destroy() может вызывать проблемы, если кнопка уже уничтожена.

Вот исправленный и улучшенный скрипт:
 local camera = workspace.CurrentCamera 
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait() -- Улучшенное получение Character
local humanoid = character:WaitForChild("Humanoid") -- Ожидание Humanoid внутри Character

local cameraMenuFrame = workspace.CameraMenuFrame

camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = cameraMenuFrame.CFrame

humanoid.WalkSpeed = 0
humanoid.JumpPower = 0

local PlayButton = script.Parent

PlayButton.MouseButton1Click:Connect(function()
camera.CameraType = Enum.CameraType.Custom
humanoid.WalkSpeed = 8
humanoid.JumpPower = 50
PlayButton:Destroy() -- Уничтожение кнопки после нажатия
end)

-- Улучшение работы со скриптом, когда игрок присоединяется позже
Players.PlayerAdded:Connect(function(plr)
plr.CharacterAdded:Connect(function(char)
local h = char:WaitForChild("Humanoid")
h.WalkSpeed = 0
h.JumpPower = 0
end)
end)

UserInputService.InputBegan:Connect(function(input, gameProcessedEvent)
if input.KeyCode == Enum.KeyCode.C then
--тут код для скрытия курсора
end
end)
Объяснения изменений:

player.Character or player.CharacterAdded:Wait(): Этот фрагмент кода надёжно получает Character. Если Character уже существует, он используется; в противном случае скрипт ожидает появления Character.

humanoid = character:WaitForChild("Humanoid"): WaitForChild теперь используется внутри character, что гарантирует, что Humanoid будет найден внутри корректно полученного Character.

PlayButton:Destroy(): Уничтожение кнопки теперь происходит после изменения параметров humanoid.

Players.PlayerAdded: Этот обработчик событий гарантирует, что ограничения скорости и прыжка будут применяться, даже если игрок присоединяется после запуска скрипта.

Рекомендации:

Проверьте наличие объекта CameraMenuFrame в Workspace: Убедитесь, что он существует и правильно назван.
Расположение скрипта: убедитесь, что скрипт находится внутри кнопки «PLAY».
Дебаг: Используйте print() операторы, чтобы проверить значения переменных на разных этапах выполнения скрипта. Это поможет определить, где именно возникает проблема.
Этот исправленный скрипт должен работать стабильнее. Если проблемы сохраняются, проверьте остальные части вашего проекта на наличие ошибок. Возможно, есть конфликт с другими скриптами. Если проблема сохранится, предоставьте больше информации о вашем проекте.
Дмитрий ЧапчиковЗнаток (350) 2 месяца назад
Как я сам уже понял, в моём скрипте нужно было увеличить задержку, скрипт просто не успевал прогрузиться с игрой
Похожие вопросы