Dash effect causing the player to anchor

Heya everyone.

I’m making a dash ability for a game and wanted to add an effect to dashing where frames lag behind you. The issue is that it anchors the player.

Script

--[[SERVICES]]--
local Players = game:GetService("Players")
local ContextActionService = game:GetService("ContextActionService")

--[[FUNCTIONALITY]]--
--//Getting the player
local Player = Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local DashAttachment = Instance.new("Attachment",Character.PrimaryPart)

--//Dashing
local DashCD = false

local function DashUser(actionName, inputState)
	if actionName == "Dash" and inputState == Enum.UserInputState.Begin then
		if DashCD then return end
		DashCD = true
		
		--//Dash
		local LinearVelocity = Instance.new("LinearVelocity",Character.PrimaryPart)
		LinearVelocity.MaxForce = math.huge
		LinearVelocity.VectorVelocity = Character.PrimaryPart.CFrame.LookVector * 100
		LinearVelocity.Attachment0 = DashAttachment
		
		--//Frames
		local FancyFrames = coroutine.create(function()
			while task.wait(0) do
				
				for _, Bodypart in pairs(Character:GetChildren()) do
					if Bodypart:IsA("BasePart") and Bodypart.Name ~= "HumanoidRootPart" then
						local FramePart = Bodypart:Clone()
						FramePart.Parent = game.Workspace.Debris
						FramePart.CFrame = Bodypart.CFrame + Bodypart.CFrame.LookVector*-3
						FramePart.CanCollide = false
						FramePart.Anchored = true
						
						game:GetService("Debris"):AddItem(FramePart,0.02)
					end
				end
				
			end
		end)
		coroutine.resume(FancyFrames)

		game:GetService("Debris"):AddItem(LinearVelocity,1)
		task.wait(1)
		
		coroutine.close(FancyFrames)
		DashCD = false
	end
end
ContextActionService:BindAction("Dash",DashUser,false,Enum.KeyCode.LeftShift)
1 Like

I think that this might be because the cloned body parts have their welds cloned as well.

Removing the welds and motor6d works, but the frames aren’t aligning correctly

--[[SERVICES]]--
local Players = game:GetService("Players")
local ContextActionService = game:GetService("ContextActionService")

--[[FUNCTIONALITY]]--
--//Getting the player
local Player = Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local DashAttachment = Instance.new("Attachment",Character.PrimaryPart)

--//Dashing
local DashCD = false

local function DashUser(actionName, inputState)
	if actionName == "Dash" and inputState == Enum.UserInputState.Begin then
		if DashCD then return end
		DashCD = true
		
		--//Dash
		local LinearVelocity = Instance.new("LinearVelocity",Character.PrimaryPart)
		LinearVelocity.MaxForce = math.huge
		LinearVelocity.VectorVelocity = Character.PrimaryPart.CFrame.LookVector * 100
		LinearVelocity.Attachment0 = DashAttachment
		
		--//Frames
		local FancyFrames = coroutine.create(function()
			while task.wait(0) do
				
				for _, Bodypart in pairs(Character:GetChildren()) do
					if Bodypart:IsA("BasePart") and Bodypart.Name ~= "HumanoidRootPart" then
						local FramePart = Bodypart:Clone()
						FramePart.Parent = game.Workspace.Debris
						FramePart.CFrame = Bodypart.CFrame + Bodypart.CFrame.LookVector*-3
						FramePart.CanCollide = false
						FramePart.Anchored = true

						--//Removing led and Motor6D's
						if FramePart.Name == "Torso" then
							for _, Weld in pairs(FramePart:GetChildren()) do
								if Weld:IsA("Weld") or Weld:IsA("Motor6D") then
									Weld:Destroy()
								end
							end
						end

						game:GetService("Debris"):AddItem(FramePart,0.02)
					end
				end
				
			end
		end)
		coroutine.resume(FancyFrames)

		game:GetService("Debris"):AddItem(LinearVelocity,0.05)
		task.wait(1)
		
		coroutine.close(FancyFrames)
		DashCD = false
	end
end
ContextActionService:BindAction("Dash",DashUser,false,Enum.KeyCode.LeftShift)

do you mean the parts aren’t line up due to time gap between parts being cloned?

might work best if you clone character as a whole and then anchor the parts of the clone

Might as well, actually.

Anyway, here’s the video about what I meant

I think that might be caused by the lookvector of the body parts being different actually

Alright. Well, I’m doing the “Clone character, anchor body parts” technique, but it won’t let me parent it to the workspace.

--[[SERVICES]]--
local Players = game:GetService("Players")
local ContextActionService = game:GetService("ContextActionService")

--[[FUNCTIONALITY]]--
--//Getting the player
local Player = Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local DashAttachment = Instance.new("Attachment",Character.PrimaryPart)

--//Dashing
local DashCD = false

local function DashUser(actionName, inputState)
	if actionName == "Dash" and inputState == Enum.UserInputState.Begin then
		if DashCD then return end
		DashCD = true
		
		--//Dash
		local LinearVelocity = Instance.new("LinearVelocity",Character.PrimaryPart)
		LinearVelocity.MaxForce = math.huge
		LinearVelocity.VectorVelocity = Character.PrimaryPart.CFrame.LookVector * 100
		LinearVelocity.Attachment0 = DashAttachment
		
		--//Frames
		local FancyFrames = coroutine.create(function()
			while task.wait(0.02) do
				
				local FrameChar = Character:Clone()
				FrameChar.Parent = game.Workspace.Debris
				FrameChar.Head.face:Destroy()
				
				for _, Bodypart in pairs(FrameChar:GetChildren()) do
					if Bodypart:IsA("BasePart") then
						
						Bodypart.Anchored = true
						Bodypart.CanCollide = false
						Bodypart.Transparency = 0.5
						Bodypart.BrickColor = BrickColor.new("White")
						
						game:GetService("Debris"):AddItem(Bodypart,0.02)
					end
				end
				
			end
		end)
		coroutine.resume(FancyFrames)

		game:GetService("Debris"):AddItem(LinearVelocity,0.05)
		task.wait(1)
		
		coroutine.close(FancyFrames)
		DashCD = false
	end
end
ContextActionService:BindAction("Dash",DashUser,false,Enum.KeyCode.LeftShift)

You need to set Character.Archivable = true to clone the character

It seems to work now!, Thank you!