Why does my character float randomly in midair?

Hello,

I have a morphing script/UI that gives players a morph depending on their rank. The morphs themselves are stored in serverstorage and welded to the player when they click a button (simple rundown).

The problem now is that, for some reason: when you try to jump down or walk down from for example, a platform or a staircase while wearing a morph that is affected: you become stuck in midair.

Important to note however, is that this only seems to happen to people wearing a morph with accessories other than a helmet. I compared all the items in the affected morphs with a morph that only wears a helmet. I have not been able to find any major issues.

Other things I have tried:

  1. Setting the unionparts’ colission fidelity from box to default (worked at first, but then stopped for a reason not known)
  2. Making sure all the parts cancollides were disabled prior to testing.
  3. Ensured “massless” was checked.

A picture of the problem can be seen here:

Morph script:

local Players = game:GetService('Players')
local Morphs = game:GetService('ServerStorage'):WaitForChild('Morphs')
local event = game:GetService("ReplicatedStorage").ChangeMesh
event.OnServerEvent:Connect(function(player, name)
	if Morphs:FindFirstChild(name)then
		local char = player.Character
		for _,v in next,char:GetChildren()do
			if v:IsA('Folder')then
				v:Destroy()
			elseif v:IsA('Accessory')and v:FindFirstChild('Handle')then
				v.Handle.Transparency=1
				if not v.Handle:FindFirstChild('HairAttachment')and not v.Handle:FindFirstChild('FaceFrontAttachment')then
					v:Destroy()
				end
			end
		end
		local morph = Morphs[name]:Clone()
		morph.Parent = char
		for _,v in next,morph:GetChildren()do
			if char:FindFirstChild(v.Name)then
				if v:IsA('BasePart')then
					local Weld=Instance.new('ManualWeld',v)
					Weld.Name='Weld'
					Weld.Part1=v
					Weld.Part0=char[v.Name]
					Weld.C0=CFrame.new(0,0,0)
					char[v.Name].Transparency=v.Transparency
					v.Transparency=1
				elseif v:IsA('Shirt')or v:IsA('Pants')then
					char[v.Name]:Destroy()
					v.Parent=char
				end
			elseif v:IsA('Humanoid')then
				v:Destroy()
			end
		end
	end
end)

Should anyone have any idea about what could be the issue and/or how to fix it, I would be very grateful.

1 Like

Did you ever figure out what was causing this bug? I’m experiencing something similar at the moment.

1 Like