I had an idea to make a spawn location selection screen in 3D.
How I thought it would work is like the middle-click function in studio. Here is how to get my desired effect:
- Select the Top face of the view selector
- Press and hold the scrollwheel
- Move your mouse around
Your camera will move around proportional to the mouse, and keep looking down. This is what I wanted to do in my game.
How would I do something like this?
I know this would have something to do with mouse.Position, but I dont really know how to calculate the new camera position.
I also tried getting the code from the Studio files, but I couldnt find anything. Is it actually possible to fork the default studio camera?
Help would be appreciated!
Any solutions?
This is what I got so far:
local cam = workspace.CurrentCamera
local plr = game.Players.LocalPlayer
local uis = game:GetService("UserInputService")
local mouse = plr:GetMouse()
local oldX = 0
local oldY = 0
local x = 0
local y = 0
local pressed = false
spawn(function()
while true do
cam.CameraType = Enum.CameraType.Scriptable
local moveX = (oldX - x)/5
local moveY = -((oldY - y)/5)
cam.CFrame = CFrame.new(Vector3.new(moveY, 60, moveX), Vector3.new(moveY,0,moveX))
wait()
end
end)
mouse.Move:Connect(function()
if pressed then
x = mouse.X
y = mouse.Y
end
end)
uis.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton3 then
pressed = true
oldX = mouse.X
oldY = mouse.Y
end
end)
uis.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton3 then
pressed = false
end
end)
Almost works, it just resets back to 0 when you click again
With some help from the DevForum, I finally got it!
If you are interested, here you go!
local camera = workspace.CurrentCamera
local plr = game.Players.LocalPlayer
local uis = game:GetService("UserInputService")
local mouse = plr:GetMouse()
local x = 0
local y = 0
local pressed = false
wait(3)
camera.CameraType = Enum.CameraType.Scriptable
wait(1)
camera.CFrame = workspace.Cam.CFrame
mouse.Move:Connect(function()
if pressed then
local moveX = x - mouse.X
local moveY = y - mouse.Y
camera.CFrame = camera.CFrame +
(camera.CFrame.RightVector * moveX)/10 +
(camera.CFrame.UpVector * -moveY)/10
x = mouse.X
y = mouse.Y
end
end)
uis.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
pressed = true
x = mouse.X
y = mouse.Y
end
end)
uis.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
pressed = false
end
end)
For it to work, you need a part in workspace named “Cam” with orientation -90, -180, 0
2 Likes