Проблема в том, что ваш скрипт полагается на 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() операторы, чтобы проверить значения переменных на разных этапах выполнения скрипта. Это поможет определить, где именно возникает проблема.
Этот исправленный скрипт должен работать стабильнее. Если проблемы сохраняются, проверьте остальные части вашего проекта на наличие ошибок. Возможно, есть конфликт с другими скриптами. Если проблема сохранится, предоставьте больше информации о вашем проекте.
Нормальный:
Сам скрипт: