What do you want to achieve? Keep it simple and clear!
Answer: I want to create a system where players can have access back to the camera after they press a specific button.
What is the issue? Include screenshots / videos if possible!
Answer: I don’t know why this system doesn’t work, because every time I click on the specific button, the camera freezes and doesn’t return to the player.
What solutions have you tried so far? Did you look for solutions on the Developer Hub?
Answer: I’ve looked everywhere possible but haven’t found a solution yet.
Here is the code that I made:
--// Variables
local Camera = workspace.Camera
local cameraPart = game.Workspace:WaitForChild("CameraPart")
local PlayersService = game:GetService("Players")
local Player = PlayersService.LocalPlayer
local Mouse = Player:GetMouse()
local playerGui = Player.PlayerGui
local menuInterfaces = playerGui:WaitForChild("MenuInterfaces")
local HideOutButton = menuInterfaces.HideOut
local RunService = game:GetService("RunService")
--// Number
local maxTilt = 5
--// Boolean
local cameraMenuEnabled = true
--// Function
local function tilt()
Camera.CameraType = Enum.CameraType.Scriptable
while cameraMenuEnabled do
Camera.CFrame = cameraPart.CFrame * CFrame.Angles(
math.rad((((Mouse.Y - Mouse.ViewSizeY / 1) / Mouse.ViewSizeY)) * -maxTilt),
math.rad((((Mouse.X - Mouse.ViewSizeX / 1) / Mouse.ViewSizeX)) * -maxTilt),
0)
if not cameraMenuEnabled then break end
task.wait()
end
end
task.spawn(tilt)
--// Button event
HideOutButton.MouseButton1Click:Connect(function()
cameraMenuEnabled = false
Camera.CameraType = Enum.CameraType.Custom
end)
Is’t it just because you are setting the cameraMenuEnabled to false?
Since the tilt script is inside a while camerMenuEnabled = true statement that means that it will only tilt while cameraMenuEnabled = true and you set it to false when the button is pressed.
Try changing this false to a true: HideOutButton.MouseButton1Click:Connect(function() cameraMenuEnabled = true Camera.CameraType = Enum.CameraType.Custom end)
But I just wanted to set it to false, because if the player presses the Button, he will have access back to the normal camera, as before the player’s camera was in the menu. And i tried the code that you send, but the result is the same as before.
Recomendo você usar RenderStepped em vez desse while e alterar a variável da camera para workspace.CurrentCamera. Pois você usando essa variável da camera, você está pegando apenas a camera do Studio e não da visão do player em si e o uso de RenderStepped é mais preciso que usar este loop. Acredito que assim deve funcionar.
Opa, eu já tinha feito justamente esse metódo quando comecei a fazer a interface do Menu, só que mais uma vez, ele não estava funcionando. Porém acho que eu descobri uma alternativa no Roblox API para resolver isto.
BR: Eu basicamente coloquei um “Destroy()” no script e ele funcionou perfeitamente. Não estou utilizando ele incorretamente pois eu criei um outro script que pode criar uma cópia da interface anterior caso o player queira voltar pra tela do menu principal.
EN: I basically put a “Destroy()” in the script and it worked perfectly. I’m not using it incorrectly because I created another script that can create a copy of the previous interface if the player wants to return to the main menu screen.
--// Button event that destroys the Main Menu
HideOutButton.MouseButton1Click:Connect(function()
Camera.CameraType = Enum.CameraType.Custom
game.Lighting:WaitForChild("BlurScene").Enabled = false
script.Parent.Parent:Destroy() -- This will automatically destroy after the Player clicks the Button
end)
Não te garanto que esse é um formato ideal, acredito que lá na frente você terá problemas com seus jogadores em relação a isso, mas enfim. Que bom que conseguiu resolver. Caso tenha interesse no formato que usei, aqui está e boa sorte com seu projeto
--// Variables
local Camera = workspace.CurrentCamera
local cameraPart = game.Workspace:WaitForChild("CameraPart")
local PlayersService = game:GetService("Players")
local Player = PlayersService.LocalPlayer
local Mouse = Player:GetMouse()
local playerGui = Player.PlayerGui
local menuInterfaces = playerGui:WaitForChild("MenuInterfaces")
local HideOutButton = menuInterfaces.HideOut
local RunService = game:GetService("RunService")
--// Number
local maxTilt = 5
--// Boolean
local cameraMenuEnabled = true
--// Function
local function updateCameraTilt()
if cameraMenuEnabled then
Camera.CameraType = Enum.CameraType.Scriptable
Camera.CFrame = cameraPart.CFrame * CFrame.Angles(
math.rad(((Mouse.Y - Mouse.ViewSizeY / 2) / Mouse.ViewSizeY) * -maxTilt),
math.rad(((Mouse.X - Mouse.ViewSizeX / 2) / Mouse.ViewSizeX) * -maxTilt),
0
)
else
Camera.CameraType = Enum.CameraType.Custom
end
end
RunService.RenderStepped:Connect(updateCameraTilt)
--// Button event
HideOutButton.MouseButton1Click:Connect(function()
cameraMenuEnabled = false
Camera.CameraType = Enum.CameraType.Custom
end)
Eu ainda estou aprendendo a programar na Engine do Roblox, ai por isso que eu tinha cometido aquela bobagem, mas o seu script é bem mais eficaz que o metódo que eu tinha feito. Mas enfim, valeu demais ai mano pelo seu ajuste! Ajudou demais agora e obrigado pelo apoio, espero que os seus futuros projetos dêem certo também!