So i’m trying to make a Dash System that :
→ Makes you dash forwards if you walk towards the front
→ Makes you dash backwards if you walk backwards
But the problem is that I don’t know how I can detect if the player goes frontwards or backwards.
You can utilize Humanoid.MoveDirection.
If you want to be a bit more precise, you could check the players velocity.
So like this?
if humanoid.MoveDirection.Magnitude > 0 then
if humanoid.MoveDirection.Magnitude < 0 then
You can use elseif instead of multiple if statements and the Magnitude of a vector3 can never be 0 so your dash backwards function would never fire
If you used the logic to find magnitude then you’d realise magnitude can never be less than 0.
You can use cframe direction rotation to get what your looking for
local char: Model = script.Parent
local Hum: Humanoid = char:WaitForChild("Humanoid")
local HumRP = char.PrimaryPart
local directive = HumRP.CFrame:VectorToObjectSpace(Hum.MoveDirection)
if directive.Z < 0 then
elseif directive.Z > 0 then
Edit: this script was placed in startercharacterscripts
I thought directive<0 is backward can u explain that thing??
By Default, -Z is forward direction of an object, and when we transform the MoveDirection relative to the world to the humanoidrootpart we check if it’s moving z is positive(backwards) or negative(forwards)
I thout z is forward thanks for the info
I think you can correct it like this??
if humanoid.MoveDirection.Z < 0 then
if humanoid.MoveDirection.Z > 0 then
This worked perfectly. Thanks!
Note that you can do the same thing, but a little bit shorter with:
local movement = HumRP.CFrame.LookVector:Dot(Hum.MoveDirection)
This will get you just
movement will be positive when moving forward, zero when standing still or moving sideways and negative when moving backward.
Speaking of moving sideways, what if the player is moving sideways and dashes?
Should he dash forward or backward?
Clearly, the player should dash to the side.
Therefore, you should simply dash in the current movement direction instead of trying to determine whether the player is going forward or backward.
The movement direction is
humanoidrootpart.Velocity * Vector3.new(1, 0, 1).
If either of these vectors have a very small magnitude (player is standing still), then dash forward instead.
(Do not mark my post as solved, the post I’m replying to actually answers the question, I’m just saying the question should’ve been different)
what about right and left? this would help a lot please
Check for the x coordinates, if directive.X is positive then player is going right and if directive.X is negative then player is going left
it actually didnt work i even implemented the same system you used
It works fine for me, you might want to start a new topic about it however as to not bump this old one