Its just a variable. Should’ve put local behind it, lol
Yeah I know, but like I don’t understand how this one line correlates to max speed? It’s just a vector3.new variable.
F = ma, and hence constant force will provide constant acceleration. You need to either use LinearVelocity or figure out when to make the force 0 so that acceleration also becomes 0 and velocity remains constant (I don’t think attaining constant velocity is possible using VectorForce due to factors such as drag, friction etc).
Maybe you can use :GetPropertyChangedSignal()
to look at the AssemblyLinearVelocity of the part for changes and update the force accordingly.
This post should help you, I think. I personally use BodyVelocity most of the time, and sometimes LinearVelocity
The thing with ALV, is that it it’s the velocity within Vector3 and not the velocity itself, so it’s harder to work with that.
It’s intended for use even without assembly linear velocity, it works as a formula of drag.
It’s simplified so everything else is a constant, area, drag, density.
Yep -velocity is intended because drag force acts in the opposite direction of movement.
But yeah I think the formula is a bit incorrect it results in a weird error.
This should be the fixed formula:
dragForce.Force = -velocity.Unit*(speed^2)*XZVector
@vxsqi Example script, insert into starter character scripts, pretty fun for testing:
local char = script.Parent
local humanoid : Humanoid = char:WaitForChild("Humanoid")
local rootPart = humanoid.RootPart
local UserInputService = game:GetService("UserInputService")
local attachment = Instance.new("Attachment",rootPart)
local vectorForce = Instance.new("VectorForce")
vectorForce.Attachment0 = attachment
vectorForce.Force = Vector3.new()
vectorForce.RelativeTo = Enum.ActuatorRelativeTo.World
vectorForce.Parent = char
humanoid.PlatformStand = true
local dragForce = Instance.new("VectorForce")
dragForce.Attachment0 = attachment
dragForce.Force = Vector3.new()
dragForce.RelativeTo = Enum.ActuatorRelativeTo.World
dragForce.Parent = char
local XZVector = Vector3.new(1,0,1)
while task.wait() do
local velocity = rootPart.AssemblyLinearVelocity
local speed = velocity.Magnitude
print(speed)
vectorForce.Force = humanoid.MoveDirection*1000
--the drag force section
if speed > 0.1 then
dragForce.Force = -velocity.Unit*(speed^2)*XZVector
else
dragForce.Force = Vector3.new()
end
end
Without drag force, speed goes to 60 and above:
With drag force speed caps at 11.
Do I have to make it relative to world? I made mine relative to attachment0.
Yep for the drag force as drag force is relative to Assembly Linear Velocity direction which is in world space.
For the movement it’s up to you, mine is because Humanoid move direction is relative to world.
Can you also explain to me what is this line for?
local XZVector = Vector3.new(1,0,1)
Oh that’s being multiplied in order to make the drag force only happen for the XZ plane when you are moving left and right.
Since it’s being multiplied it makes the Y zero and hence makes the drag force not happen at all when you are falling down and up. Unless you want a some sort of parachute effect.
i am sorry i didnt notice that. i am in elementry so i dunno what drag is tho i understood what it is now.
But he just wants a force limiter on a vector force so he should be good with a while loop but @dthecoolest 's method is better as it allows more customization
Sorry, but what is “Unit”? Is this meant to be a defined variable already?
Unit is a vector with the length of one, hence one unit.
it describes the direction of the drag force.
-velocity.Unit
The rest is a factor on how much to increase this drag force in this direction.
--drag factor, depends on speed
(speed^2)*XZVector
Oh because the error I’m getting is saying ‘Unit is not a valid member of VectorForce’.
Try mine once. It should work but i still strongly reccomend you to solve the error.
(also you do VectorForce.Force.Unit)
I don’t understand the code, what do you mean by
Vector3.new(YourDesiredClampValue`sX,YourDesiredClampValue`sY,YourDesiredClampValue`sZ
?
I need explanation for things.
For some reason, doing this causes my car to spin and turn oddly.
You might want to apply drag to the center of mass then.
https://developer.roblox.com/en-us/api-reference/class/VectorForce
Also checking out the direction of the force is good like the relative to options.
Oh, would I also do the same for the vectorForce?
u could do a loop with
while wait() do
if forcevalue >= vector3.new(number,number,number) than
forcevalue == vector3.new(number,number,number)
end
end
i don’t know to will it work but i think it should