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)