2d fighting game style knockback

You can write your topic however you want, but you need to answer these questions:

  1. What do you want to achieve? I want to achieve wall bounce knockback and curvy knockback example : https://youtu.be/83IJAuC7kkw?t=298 and curvy i mean like when our enemy goes up in the air and curve back down to the ground.

  2. What is the issue? I don’t how to implement it and lot of the things i tried so far don’t seem to work like bodymover is not accurate tween is laggy.

  3. What solutions have you tried so far? I tried bodymover and tweening but they don’t seem to give me the same effect that i want.

Here’s i what i tried before i write this topic.

  local HumRoot = script.Parent.HumanoidRootPart
local rg = Instance.new("Part")
rg.CFrame = HumRoot.CFrame*CFrame.Angles(math.rad(-25),0,0)

local ray = Ray.new(HumRoot.Position,rg.CFrame.LookVector * -50)
local hit, pos, normal = game.Workspace:FindPartOnRayWithIgnoreList(ray,{workspace.Rig})
local norm = CFrame.new(pos, pos + normal)

local BezierTween = require(game.ReplicatedStorage.BezierTweens)
local Waypoints = BezierTween.Waypoints

if hit then
	local finalpos = norm * CFrame.new(0,0,-workspace.Rig:GetExtentsSize().Z/2)
	
	
	local P0, P1, P2 = HumRoot.Position, finalpos:Lerp(finalpos,0.5)*CFrame.new(0,5,0).Position, finalpos.Position

	waypoints = Waypoints.new(P0, P1, P2)
	
	local Body = Instance.new("BodyPosition")
	Body.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
	Body.P = 1200
	Body.D = 120
	Body.Position = HumRoot.Position
	Body.Parent = HumRoot
	
	local Tween = BezierTween.Create(Body, {
		Waypoints = waypoints,
		EasingStyle = Enum.EasingStyle.Sine,
		EasingDirection = Enum.EasingDirection.In,
		Time = 0.8,
	})
	Tween:Play()
	
	print("de")
end