Help with viewport

https://streamable.com/zi37ad
Im trying to make a character customize screen and it works somewhat fine but as you can see sometimes the character jitters and I don’t know what the problem is

local script under viewport


local character = game.Players.LocalPlayer.Character or game.Players.LocalPlayer.CharacterAdded:Wait()
character.Archivable = true

local viewport = script.Parent

local viewportCam = Instance.new("Camera", viewport)
viewport.CurrentCamera = viewportCam

local clone



game:GetService("RunService").Heartbeat:Connect(function()
	if clone then clone:Destroy() end
	clone = character:Clone()
	local hrp = clone:FindFirstChild("HumanoidRootPart")
	if not hrp then return end
	viewportCam.CFrame = CFrame.new(hrp.Position + (hrp.CFrame.LookVector * 5), hrp.Position)
	clone.Parent = viewport
end)

local script under gui

local rs = game:GetService('ReplicatedStorage')

local updateHair = rs.Events.UpdateHair
local updateSkin = rs.Events.UpdateSkin
local hairFolder = rs.Hair
local updateGender = rs.Events.UpdateGender
local models = rs.CharacterModels

local buttons = script.Parent.Buttons

local cooldown = false


repeat
	task.wait()
until
game:IsLoaded()


for _, button in pairs(buttons:GetChildren()) do
	if button:IsA('TextButton') then
		if button.Name ~= 'male' or 'female' then
			button.Activated:Connect(function()
				for _, hair in pairs(hairFolder:GetChildren()) do
					if hair.Name == button.Name then
						updateHair:FireServer(hair)
					end
				end
			end)
		end
	end
end

for _, button in pairs(buttons:GetChildren()) do
	if button:IsA('TextButton') then
		if button.Name == 'male' or 'female' then
			button.Activated:Connect(function()
				for _, model in pairs(models:GetChildren()) do
					if model.Name == button.Name then
						updateGender:FireServer(model)
					end
				end
			end)
		end
	end
end

server script under gui

local rs = game:GetService('ReplicatedStorage')

local updateHair = rs.Events.UpdateHair
local updateSkin = rs.Events.UpdateSkin
local hairFolder = rs.Hair
local updateGender = rs.Events.UpdateGender

updateHair.OnServerEvent:Connect(function(player, hair)
	for _, child in pairs(player.Character:GetChildren()) do
		if child:IsA('Accessory') then
			child:Destroy()
		end
	end
	local clone = hair:Clone()
	clone.Parent = player.Character
end)

updateGender.OnServerEvent:Connect(function(player, model)
	local oldCFrame = model:GetPrimaryPartCFrame()
	for _, child in pairs(player:GetChildren()) do
		if child:IsA('Model') and child.Name == 'StarterCharacter' then
			child:Destroy()
		end
	end
	local clone = model:Clone()
	player.Character = clone
	clone.Parent = workspace
	clone:SetPrimaryPartCFrame(oldCFrame)

end)

It’s because you keep destroying the character and cloning it every single frame

Is there a different way I should do it

Nevermind I found a way to fix it without using runservice

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.