I want to make a part fly off towards the direction it's facing when a player touches it. I can get the direction with lookVector, but how would I apply that to something, like BodyVelocity?
COMMUNITY QUESTION
How do I apply direction to a velocity?
3 answers
Velocity is both the speed and the direction of a Part. lookVector is also a direction, so you can set it directly:
part.Velocity = part.CFrame.lookVector * bigNumber
You need to multiply it by a big number so that it will have more speed.
Here's some code for a missle from a plane - basically BodyVelocity.velocity is set to the lookvector of a part and multiplied by the speed you want it to go forward.
function FireMissile(Gun) --This function creates the non-guided missiles for the missile spawns
if (not Locked) then
local Exploded = false
local Part1 = Instance.new("Part")
Part1.Name = "Missile"
Part1.CanCollide = false
Part1.FormFactor = "Symmetric"
Part1.Size = Vector3.new(1,1,5)
Part1.BottomSurface = "Smooth"
Part1.TopSurface = "Smooth"
local Mesh = Instance.new("SpecialMesh")
Mesh.Parent = Part1
Mesh.MeshId = "http://www.roblox.com/asset/?id=2251534"
Mesh.MeshType = "FileMesh"
Mesh.TextureId = "http://www.roblox.com/asset/?id=2564491"
local Part2 = Instance.new("Part")
Part2.Parent = Part1
Part2.Name = "Visual"
Part2.Transparency = 1
Part2.CanCollide = false
Part2.FormFactor = "Symmetric"
Part2.Size = Vector3.new(1,1,1)
Part2.BottomSurface = "Smooth"
Part2.TopSurface = "Smooth"
local Weld = Instance.new("Weld")
Weld.Parent = Part1
Weld.Part0 = Part1
Weld.Part1 = Part2
Weld.C0 = CFrame.new(0,0,5)*CFrame.Angles(math.rad(0),0,0)
local BV = Instance.new("BodyVelocity")
BV.Parent = Part1
BV.maxForce = Vector3.new(math.huge,math.huge,math.huge)
local BG = Instance.new("BodyGyro")
BG.Parent = Part1
BG.maxTorque = Vector3.new(math.huge,math.huge,math.huge)
BG.cframe = Gun.CFrame * CFrame.Angles(math.rad(0),0,0)
local Fire = Instance.new("Fire")
Fire.Parent = Part2
Fire.Enabled = false
Fire.Heat = 25
Fire.Size = 30
local Smoke = Instance.new("Smoke")
Smoke.Parent = Part2
Smoke.Color = Color3.new(40/51,40/51,40/51)
Smoke.Enabled = false
Smoke.Opacity = 1
Smoke.RiseVelocity = 25
Smoke.Size = 25
local PlaneTag = Instance.new("ObjectValue")
PlaneTag.Parent = Part1
PlaneTag.Name = "PlaneTag"
PlaneTag.Value = Plane
Part1.Touched:connect(function(Object)
if (not Exploded) then
if (not Object:IsDescendantOf(Character)) and Object.Name ~= "Missile" then
Exploded = true
local Explosion = Instance.new("Explosion")
Explosion.Position = Part1.Position
Explosion.BlastPressure = 50
Explosion.BlastRadius = 5
ScanPlayers(Part1.Position,5)
Explosion.Parent = game.Workspace
Part1:Destroy()
end
end
end)
Part1.Parent = game.Workspace
Part1.CFrame = (Gun.CFrame * CFrame.Angles(math.rad(0),0,0)) + Gun.CFrame.lookVector * 15
BV.velocity = Part1.CFrame.lookVector * Engine.Velocity.magnitude
delay(.03,function()
BV.velocity = (Part1.CFrame.lookVector * 1000) + Vector3.new(0,0,0)
Fire.Enabled = true
Smoke.Enabled = true
end)
delay(5,function() Part1:Destroy() end)
end
end
Speed and Direction and both controlled by the velocity. here's and example
function fire(d)
Part.Position = script.Parent.Part.Position + (d*5)
Part.Velocity = d*100
end
so the *5 is how far it will be pushed from the part(not how far overall) and *100 is how fast it will be pushed higher the number faster it goes.
This discussion is preserved as it was. New answers, comments, and votes are closed.
