Help with a script for loading characters, playing animation, and zooming in

I’m currently working on a script in Roblox that involves moving characters to a specific position, playing an animation, and zooming into the character. When it’s done playing the animation, it’s meant to stop zooming and moves onto the next character.
However, I’m facing some difficulties with the zooming and playing an animation.


Skipping and not loading animations on time, camera glitching back to player

Here’s the code behind this:

local function ZoomIn(targetObject, startDistance, endDistance, speed)
	local camera = game.Workspace.CurrentCamera
	local currentDistance = startDistance
	local function zoomIn()
		currentDistance = currentDistance - speed
		if currentDistance <= endDistance then
			return
		end
		local cameraPosition = targetObject.Position - targetObject.CFrame.LookVector * currentDistance
		local lookAtPosition = targetObject.Position

		camera.CFrame = CFrame.new(cameraPosition, lookAtPosition)

		camera.CameraSubject = nil
	end
	local connection
	connection = game:GetService("RunService").RenderStepped:Connect(function()
		zoomIn()
		if currentDistance <= endDistance then
			connection:Disconnect()
		end
	end)
end


local function loadChar(model, animation, startDistance, endDistance, speed)
	local humanoid = model.Humanoid
	model:SetPrimaryPartCFrame(CFrame.new(0, 0, 0))
	local dancing = humanoid:LoadAnimation(animation)
	dancing:Play()
	dancing:AdjustSpeed(0.7)
	ZoomIn(model.Forward, startDistance, endDistance, speed)
	while dancing.IsPlaying do
		wait()
	end
	model:SetPrimaryPartCFrame(CFrame.new(-31.855, -0.8, -127.423))
end

while true do
	loadChar(game.Workspace.builderman, script.Building, 7, 2, 0.1)
	loadChar(game.Workspace.Coeptus, script.Shrug, 7, 2, 0.1)
	loadChar(game.Workspace.Dued1, script.Run, 7, 2, 0.1)
end

Any solutions are immensely appreciated!

2 Likes