We are making an animation GUI for my game, and it features some animations that use models in them. The Model works in the animation editor, but we can't figure out how to spawn it in from a GUI button just for the animation, and then get rid of it after without it being bugged. We have managed to spawn it in but it is EXTREMELY buggy.

The model itself consists of 3 unions, and they are all welded together. A Motor6D is placed in the torso of our dummy, and part0 is welded to the HumanoidRoot, and part1 to a part within the model, which is also in the torso.

Here is the code for doing this

local animation = script.Animation1
local VectorZero = Vector3.new(0,0,0)
local localPlayer = script.Parent.Parent.Parent.Parent.Parent
local Character = localPlayer.Character
local Humanoid = Character:WaitForChild("Humanoid")
local hasSat = false
local CanEmote = true
local isAllowed = false
local isNoCollided = false
local isFalling = false
local hasBeenChecked = false
local isActive = false
local bypassed = require(game.ReplicatedStorage.drvkStuff)
local animation1
local chair
local allowedUsers = 
{
	"hwlq";
	"drvk";
}


local function stopAnimationsTracks()
	-- Get playing animations
	local AnimationTracks = Humanoid:GetPlayingAnimationTracks()
	 
	-- Stop all playing animations
	for i, track in pairs (AnimationTracks) do
		track:Stop()
	end
end

local function setupChair()
	chair = game.ServerStorage.God.Chair:Clone()
	local motor6 = Instance.new("Motor6D")
 	motor6.Part0 = Character.HumanoidRootPart
	motor6.Part1 = chair.Main 
	chair.Parent = Character.Torso
	chair.Main.CFrame = Character.Torso.CFrame
	chair.Union.CFrame = Character.Torso.CFrame
	chair.Union2.CFrame = Character.Torso.CFrame
	chair.Main.Parent = Character.Torso
	motor6.Parent = chair
	--chair.CFrame = Character.Torso.CFrame
end

local function userIsAllowed()
	if isAllowed then
		return
	end
	if not hasBeenChecked then
		for i, v in pairs (allowedUsers) do
			if localPlayer.Name == v then
				isAllowed = true
				return
			end
		end
		isAllowed = false
		hasBeenChecked = true
	end
end

local function makePlayerNoColide()
	Character.Torso.CanCollide = false
	Character.Head.CanCollide = false
end

local function makePlayerCollide()
	Character.Torso.CanCollide = true
	Character.Head.CanCollide = true
end

local function findAllContributorChairs()
	for i,v in pairs (Character.Torso:GetChildren()) do
		if v.Name == "Chair" then
			v:Destroy()
		end
	end
end

local function setupCharacter()
	if not Character then
		Character = localPlayer.CharacterAdded:Wait()
	end
	Humanoid:WaitForChild("Animator")
	animation1 = Humanoid:LoadAnimation(animation)
end
setupCharacter()

local function isAnimationNilAndPlaying()
	if animation1 and animation1.IsPlaying then
		animation1:Stop()
		isActive = false
	end
	if isAllowed then
		findAllContributorChairs()
	end
	if not Character.Torso.CanCollide and not Character.Head.CanCollide then
		makePlayerCollide()
	end
end

local function Moved()		
	if Humanoid.MoveDirection ~= VectorZero then
		isAnimationNilAndPlaying()
	end
end

local function onSeated(isSeated)
	if isSeated then
		hasSat = true
		if isActive then
			isAnimationNilAndPlaying()
			isActive = false
		end
	else 
		hasSat = false
	end
end

local function onJumping()
	isAnimationNilAndPlaying()
end

local function isFreeFalling(falling)
	if falling then
		isFalling = true
	else
		isFalling = false
	end
end


animation1:GetMarkerReachedSignal("Chair"):Connect(function()
	chair.Transparency = 0
end)

animation1.KeyframeReached:Connect(function(keyframeName)
	print("Working")
	local timeOfKeyFrame = animation1:GetTimeOfKeyframe("LoopStart")
	if keyframeName == "LoopEnd " then
		animation1.TimePosition = timeOfKeyFrame
		print("Working Reeee")
	end
end)

script.Parent.MouseButton1Click:Connect(function()
	userIsAllowed()
	if isAllowed and not isFalling and not isActive and CanEmote and not hasSat then
		CanEmote = false
		findAllContributorChairs()
		makePlayerNoColide()
		stopAnimationsTracks()
		isActive = true
		animation1.Priority = Enum.AnimationPriority.Action
		setupChair()
		animation1.Looped = true
		animation1:Play()
		wait(5)
		CanEmote = true
	end
end)


Humanoid:GetPropertyChangedSignal("MoveDirection"):Connect(Moved)
Humanoid.FreeFalling:Connect(isFreeFalling)
Humanoid.Seated:Connect(onSeated)
Humanoid.Jumping:Connect(onJumping)

I have no idea if there is a better way of doing this, but there are many problems with it as it is now. Does anyone have any idea how to help with this?