Best way to naturally move a Player to a position

So I’m working on this system that makes you go to a surface blah blah blah whatever. Using tweens whenever I try it feels unnatural and not very smooth. It works, but it is terrible to watch.

The animations are an obvious one but the movement getting to my point is what I’m talking about, so.

I thought about using body movers but I couldn’t find a good resource of what they removed them and replaced them with. Plus I have about no experience/idea with using/how to use them.

Any ideas? This is all the tweening code for moving by the way.

local MovePlayer = TweenService:Create(HumanoidRootPart, TweenInfo.new(0.8, Enum.EasingStyle.Linear, Enum.EasingDirection.Out), {
						CFrame = CFrame.new(OnWallPosition , OnWallPosition + MouseRay.Normal)})

It just feels so wrong. It’s laggy, the rotating is weird which I can fix:
https://gyazo.com/b95303936f042ab3d19df01e72568b4a

Any ideas on what I should use instead?

You should use Enum.EasingStlye.Sine as a simple fix for the player immediately stopping.

This shouldn’t be a constant value, it should take longer to get from one side of the map to the other compared to moving a single step.

https://developer.roblox.com/en-us/api-reference/enum/EasingStyle

Sorry for my incompetence but what exactly do you mean by this?

From what I can see, the grapplinghook will always take 0.8 seconds to take the player to where their mouse clicked. This isn’t very realistic. Instead, it should be something like;

local Distance = (HumanoidRootPart.Position - OnWall.Position).Magnitude
local DistanceFactor = 0.1

local MovePlayer = TweenService:Create(
    HumanoidRootPart,
    TweenInfo.new(
        Distance * DistanceFactor,
        Enum.EasingStyle.Sine,
        Enum.EasingDirection.Out
    ),
    {
        CFrame = CFrame.new(OnWallPosition, OnWallPosition + MouseRay.Normal)
    }
)

Try tweaking DistanceFactor, it probably won’t be perfect. Higher values makes it take longer, lower values makes it take less.

Why not use MoveTo on the humanoid instead of tweening?

This does help, thanks!

It really doesn’t offer me any control over it + it could be even more robotic than tweening although it never hurts to try

Using MoveTo would be the proper way of doing it rather than tweening as it makes the character actually walk there.
If you want more control over it you would use the pathfinding api / make a custom path if its not something that needs to be calculated

The character shouldn’t be walking in the air, I believe OP is trying to achieve a grapplinghook or Spiderman’s webslingers, apparent by the video.

Ah i didnt look at it since im on mobile and its not embedded, in that case he should probably use forces as tweening will clip the player through objects which is probably undesirable behavior