I tried to find a game to give an example on my question, but I couldn’t find any.
Basically, when your camera’s CFrame is locked onto a part, your camera can also look at where your mouse is pointing, but not directly at it, just kind of shift a bit.
In this video I made the camera’s CFrame look at my mouse, but it looks directly at it, which is not what I want, I just want it to partially look, and to give it a limit to how much it can rotate:
As you can see, the camera rotates to where the mouse is pointing, but it keeps on following it, and there’s no limit (i can look at the opposite direction).
This is my code:
local setCameraCFrame = RuS.Heartbeat:Connect(function(frame)
camera.CFrame = CFrame.lookAt(camera.CFrame.Position,mouse.Hit.Position)
end)
I can’t find any games in my Continue section, even though I remember playing one or two games with this.
I’ll try to explain…?
Basically, your camera is locked onto a part with CFrame, but I want it to partially look at where the player’s mouse of pointing, so if my mouse is at the bottom left of the screen the camera will be looking slightly to the bottom left, with some kind of limit.
Try this (found it in this post and did some tweaking)
local Mouse = game.Players.LocalPlayer:GetMouse()
local Camera = game.Workspace.CurrentCamera
Camera.CameraType = Enum.CameraType.Scriptable
--Change these to be camera spot
Camera.CameraSubject = game.Workspace:WaitForChild('Part')
Camera.CFrame = game.Workspace:WaitForChild('Part').CFrame
local DefaultCFrame = Camera.CFrame
local Scale = 20 --Lower means stronger
function Update()
-- get the center of the screen
local Center = Vector2.new(Camera.ViewportSize.X/2, Camera.ViewportSize.Y/2)
-- get the movement (it's in studs, and the mouse properties are in pixels, so you want to divide it by your scale to not move the camera really really far)
local MoveVector = Vector3.new((Mouse.X-Center.X)/Scale, ((-Mouse.Y)-Center.Y)/Scale, 0)
-- CFrame * CFrame makes it work the same regardless of rotation, where addition just makes it work for one direction
Camera.CFrame = DefaultCFrame * CFrame.new(DefaultCFrame.p + MoveVector)
end
game:GetService("RunService").RenderStepped:Connect(Update)