Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Sending a Part Diagonally?

I am trying to send a part in a diagonal direction using a BodyVelocity. The BodyVelocity only has:

rightVector (can be used to send a part left or right)

local BodyVelocity = Instance.new("BodyVelocity")
BodyVelocity.Velocity = (HumanoidRootPart.CFrame.rightVector * 50)
BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
BodyVelocity.Parent = Part

local BodyVelocity = Instance.new("BodyVelocity")
BodyVelocity.Velocity = (HumanoidRootPart.CFrame.rightVector * -50)
BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
BodyVelocity.Parent = Part2

upVector (can be used to send a part upward or downward)

local BodyVelocity = Instance.new("BodyVelocity")
BodyVelocity.Velocity = (HumanoidRootPart.CFrame.upVector * 50)
BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
BodyVelocity.Parent = Part

local BodyVelocity = Instance.new("BodyVelocity")
BodyVelocity.Velocity = (HumanoidRootPart.CFrame.upVector * -50)
BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
BodyVelocity.Parent = Part2

and a lookVector (can be used to send a part forward or backward)

local BodyVelocity = Instance.new("BodyVelocity")
BodyVelocity.Velocity = (HumanoidRootPart.CFrame.lookVector * 50)
BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
BodyVelocity.Parent = Part

local BodyVelocity = Instance.new("BodyVelocity")
BodyVelocity.Velocity = (HumanoidRootPart.CFrame.lookVector * -50)
BodyVelocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
BodyVelocity.Parent = Part2

What would I need to work out so that the part can be sent in a direction diagonally from the player? I tried finding the distance between the lookVector and the rightVector...only to realise that it is pointless.

2 comments

0

why are you using multiple bodyvelocities

0

I'm not. They are just to show that I know how to use them

1 answer

✓ Accepted answer

BodyVelocity.Velocity is a Vector3. You could use a "diagonal" vector by using a combination of it's components:

BodyVelocity.Velocity = Vector3.new(1, 1, 1) -- moving 1 on each axis, creating "diagonal" like movement (if that was what you meant)

But you might want to change it to a unit vector so a magnitude can be explicitly set and adjusted:

BodyVelocity.Velocity = Vector3.new(1, 1, 1).Unit * magnitude

LookVector, UpVector, and RightVector are components that belong to CFrames. They are unit vectors of where the CFrame looks at, the "top" of the CFrame, and the "right" of the CFrame respectively, all relative to it's orientation. If you mean to have a BodyVelocity.Velocity that is relative to a part's orientation you could use the VectorToWorldSpace of CFrames:

BodyVelocity.Velocity = part.CFrame:VectorToWorldSpace(Vector3.new(1, 1, 1).Unit) -- turn "diagonal" vector to have a relative orientation to the part's CFrame. Equivalent to UpVector + RightVector - LookVector

I can't explain everything here so look up Vector3s and CFrames.

This discussion is preserved as it was. New answers, comments, and votes are closed.