Need Help Creating Smooth Knockback

Hello, I’m trying to create a smooth knockback system in Roblox Studio similar to Anime Battle Arena (ABA). Here’s a video showcasing their knockback:


Can anyone share tips on how to create this smooth knockback? I’ve tried using VectorForce, LinearVelocity, and BodyVelocity along with setting SetNetworkOwner to nil, but nothing seemed to give me a smooth knockback. They were all just jittery and had a big delay. Any advice or examples would be greatly appreciated! Thanks!

this is a deep rabbit hole of networking ur going into

the simplest and easiest way is to just have the defending client move themselves with :ApplyImulse() (or whatever your other favorite velocity-related function/constraint is) on their rootpart, yes it has delay for the attacker but it is easily the quickest solution to an unsolvable problem

ABA probably “cheats” by having their dummies’ network ownership set to the client or something like that

Scripting
local db = true
script.Parent.Touched:Connect(function(hit)
	local Hit_Character = hit.Parent:FindFirstChild("Humanoid").Parent or hit.Parent.Parent:FindFirstChild("Humanoid").Parent
	if db then db = false
		local bv = Instance.new("BodyVelocity")
		local offset = Vector3.new()
		bv.Parent = (Hit_Character.LowerTorso)
		bv.MaxForce = Vector3.new(100000,100000,100000) -- can mess with this or the 80's
		bv.Velocity = (Hit_Character.Head.CFrame.LookVector * -80)
			+ (Hit_Character.Head.CFrame.UpVector * 80)
		wait(0.01) bv:Destroy() db = true
	end	task.wait(0.33)
end)
local Speed = 40
local Force = 80000

local TotalForce = Force

local KnockBack = Instance.new("BodyVelocity")
KnockBack.Parent = part.Parent:FindFirstChild("HumanoidRootPart")--part is the target of the knockback/ the opponent

KnockBack.MaxForce = Vector3.new(TotalForce,TotalForce,TotalForce)
KnockBack.Velocity = Character:FindFirstChild("HumanoidRootPart").CFrame.LookVector * Speed -- based on the direction YOUR character is facing.
local velocity = Instance.new("BodyVelocity",hit.Parent.HumanoidRootPart)
		velocity.MaxForce = Vector3.new(3,3,3) * math.huge
		local dir = (hit.Parent.HumanoidRootPart.CFrame.Position - script.Parent.Parent.HumanoidRootPart.Position).Unit
		velocity.Velocity = (dir + Vector3.new(0,1,0)).Unit *script.Parent.Configuration.Power.Value

		local rot = Instance.new("BodyAngularVelocity",hit.Parent.HumanoidRootPart)
		rot.AngularVelocity = Vector3.new(1,2,1) * math.pi *5
		rot.MaxTorque = Vector3.new(2,5,2) *math.huge
		rot.P = 5000

		game:GetService("Debris"):AddItem(velocity, 0.5)
		game:GetService("Debris"):AddItem(rot,0.5)
		wait(0.8)