Smoother movement effect

What do you want to achieve?
I’m trying to recreate an effect from a game called Cataclysmic Clash/an aged legacy…? called “Magnet” where a character gets bound to a relative spot to their attacker. It’s called an opposite of knock back.

What is the issue?
I managed to reach a point where the character stays in that relative spot but the movement is very jittery.

What solutions have you tried so far?
So far I’ve tried setting the CFrame using Stepped/Heartbeat (this is what I used in the clip), used align position, tween service, and I’ve used welds. All using RunService except for the weld.

Just seems like ping

  1. Try using welds, you can just have the other humanoid be disabled and carry the character around.

  2. You could set up a RemoteEvent in ReplicatedStorage then signal to every client that both of these models are now bound together, and then use the RenderStepped event to move the body relative to your character.
    Honestly this method is a little finicky and may give you a headache in the future if not implemented correctly.

But if you’re already doing the positioning and the movement is still jittery I’d recommend using springs, there are multiple modules to help you implement these in your code.

Hi thanks for your reply, I’ve tried it on two different devices and also had my friends test it cause I thought it was ping too but they all had the same experience. With welds, it wouldn’t have the same effect though as you can see in the clip the bound character retains its orientation but changes position, welds change both as far as I’m aware unless I use the Weld and keep changing C1 Orientation in the weld.

With 2 I’m a bit confused on what you mean. Wouldn’t it get messy given that this won’t only be used on a dummy but also other players? And wouldn’t that also be exploitable?

From what I understand you want to maintain the initial rotation.
I would do something like this.
Weld both players and save the rotation. After separating the weld, I would apply the rotation again.

Change the values ​​of course.

local function bringPlayer()
	local weld = Instance.new("WeldConstraint")
	local part = -- Player HumanoidRootPart
	local oldRot = part.CFrame - part.CFrame.Position
	weld.Parent = -- Player Character
	weld.Part0 = -- Player 1 HumanoidRootPart
	weld.Part1 = -- Player 2 HumanoidRootPart
	
	task.wait(3) -- time for unbring
	local playerPos = HumanoidRootPartPlayer2.CFrame.Position
	HumanoidRootPartPlayer2.CFrame = CFrame.new(playerPos) * oldRot
	
end

Thank you and yes this would make the player return to the original rotation when the effect ends, but it wouldn’t stay the original orientation throughout the effect. If you watch the first video again you’ll see that the dummy changes position but never changes it rotation throughout, not just at the end.