Camera and Character Movement Issues


im trying to debug a little thing im working on, which sets the camera to a fixed angle based on the region of the world the player is in. everything is fine so far, but when moving towards a region, the issue begins

the issue?

lets say you’re walking towards a region still holding “W” the foward movement key, which allows you to enable the fixed angle…

then after that, the camera changes but you’re still holding “W”, since the camera is facing in an alternate direction, your character will also move that way

i dont really like that, because in my opinion i find this to be bad game design and would throw people off if this were to occur during actual gameplay


i’ve tried looking through the devforum for a solution to this issue of mine, but it appears like no one has weird problems unlike me lol

the solution im looking for is to have the player move in the same direction they’re going towards originally, even if the camera has changed it’s direction. if this is possible and you’ve got an answer, please tell me! i’d love to hear it!

1 Like

This isn’t going to be easy to achieve. I think you would be better off halting character movement and making a tween to show them the new camera, if that applies well to your game?

1 Like

I am not sure if this is what you want to do

(just to confirm i am on right track)

1 Like

yeah that’s basically what im going for! if possible, may you elaborate what you did to keep the player in the same original direction?

It maybe a little long but here is Step-by-Step

first you need to fork PlayerModule by press “Play” in-studio and press player find your name and press “PlayerScripts” then Copy “PlayerModule” then press “Stop”


then find “StarterPlayerScripts” and Paste “PlayerModule” we just copied it should look like this


now open “ControlModule”


and scroll down until you reach last function

and paste this below that last function

function ControlModule:SetRelativeCamera(bool)

self.activeController.moveVectorIsCameraRelative = bool


it should look like this

now in your script you need to require ControlModule from LocalPlayer here is my example (You can ignore anything that i don’t commented)

local Region = workspace.Region

local cam = workspace.CurrentCamera
local player = game:GetService("Players").LocalPlayer -- Get Local Player
local PlayerModule = player.PlayerScripts.PlayerModule -- Player Module that we copy and pasted
local ControlModule = require(PlayerModule.ControlModule) -- require ControlModule

local Touched = false
local EndedDelay = 0.5
local CN

local hittedPart

	if hit.Parent:FindFirstChild("Humanoid") then
		if Touched then
		hittedPart = hit
		Touched = true
		ControlModule:SetRelativeCamera(false) -- Don't move character Relative to Camera (Custom Function that we make)
		cam.CameraType = Enum.CameraType.Scriptable
		CN = game:GetService("RunService").Heartbeat:Connect(function()
			cam.CFrame = (hit.Parent.HumanoidRootPart.CFrame + hit.Parent.HumanoidRootPart.CFrame.RightVector * 20) * CFrame.Angles(0, math.rad(90),0)

	if EndedPart ~= hittedPart then
	hittedPart = nil
	cam.CameraType = Enum.CameraType.Custom
	ControlModule:SetRelativeCamera(true) -- move character Relative to Camera (Custom Function that we make)
	Touched = false

If you are confused at any point you can ask me


heck yea, thats exactly what i’ve been looking for! thank you so much!!!

1 Like

Thank you! Any idea how to change the “relative” object from camera to something like another part?

by “another part” do you mean like make character move in the same direction as certain part or something else?

1 Like

I’m making a selfie stick, and I used the following code:

local WS = game:GetService('Workspace')
local cam = WS.CurrentCamera

local tool = script.Parent

local camPosition = tool:WaitForChild('CamPosition')

local equipped = false

local Players = game:GetService('Players')
local player = Players.LocalPlayer

local StarterPlayer = game:GetService("StarterPlayer")

local RunService = game:GetService('RunService')

local function toBind() 
    cam.CFrame = camPosition.CFrame

    cam.CameraType = Enum.CameraType.Scriptable
    cam.CameraSubject = camPosition
    RunService:BindToRenderStep("CameraBind", 1, toBind)

    cam.CameraType = Enum.CameraType.Custom
    cam.CameraSubject = player.Character:WaitForChild("Humanoid")

The issue is, changing the camera’s subject and type bugs the player movement when the player tries to move, it’s weird.
When they move backwards (Press W): They start rotating like hell
When they move towards camera (Press S): There is a slight curve in movement

So, If I use the method you provided, movement becomes relative to world while I still wanted it relative to camera but not buggy. I was thinking it’ll be fixed If i change the movement of player to be relative to a part directly in front of the player.

1 Like

as for this you could disable Humanoid [AutoRotate] I am not sure if camera moving along with animations is intended effect for you or not but here is result.

1 Like

Works perfectly! Thank you so much!

1 Like