How do I tween from a Scriptable camera to a Custom camera?

In my game, a player can press a button to activate a top-down view of the map. They can press the button again to recover their Custom camera.

The problem I’m having is that the camera goes into a first-person view for a split second, and then the camera fixes itself after I change the CameraType to Custom. I want the camera to smoothly fix itself; not abruptly.

Here’s what’s happening:

Here’s my code:

local TOP_DOWN_OFFSET =, 90, 0);

local function ToggleCamera(actionName, inputState)
	if CameraMode == "TD" then
		-- Classic
		Camera.CameraSubject = Player.Character.Humanoid;
		Camera.CameraType = Enum.CameraType.Custom;
		local Tween = TweenService:Create(Camera,, {CFrame = Player.Character.Head.CFrame});
		-- Top-down
		Camera.CameraType = Enum.CameraType.Scriptable;
		local CurrentTopDown =, 0, 0);
		local function UpdateCamera()
			if CurrentTopDown ~= TOP_DOWN_OFFSET then
				CurrentTopDown =, CurrentTopDown.Y + 5, 0);
			if Player.Character then
				local PlayerPosition = Player.Character.HumanoidRootPart.Position;
				local CameraPosition = PlayerPosition + CurrentTopDown;
				-- Follow the player
				Camera.CoordinateFrame =, PlayerPosition);
		RunService:BindToRenderStep("TopDownCamera", Enum.RenderPriority.Camera.Value, UpdateCamera);
		CameraMode = "TD";

ContextActionService:BindAction("ToggleCamera", ToggleCamera, false, Enum.KeyCode.C);

What am I doing wrong?

the issue is that you’re making the CameraType custom, and it overrides the tween. You should:

Do tween --> wait(0.4) --> make CameraType Custom