So, i'm improving my gun script and I need a bullet to move forward facing the position of anyCFrame.p
. I need help lol.
You can use a BodyPosition to make a Part move towards a certain position. When using it, gravity doesn't affect the part.
For example:
local part = script.Parent local target_position = Vector3.new(0, 0, 0) -- for example local body_position = Instance.new("BodyPosition") body_position.Position = target_position body_position.Parent = part
You can also set the other properties (MaxForce, D for dampening and P for power) to take further control over the behaviour.
See the documentation here: https://developer.roblox.com/en-us/api-reference/class/BodyPosition
Note that when using a BodyPosition, the Part will stop once it has reached the specified position. You can use a BodyForce instead to move in a certain direction:
local part = script.Parent local target_position = Vector3.new(0, 0, 0) -- for example local force_factor = 50 -- fiddle with this to your liking local body_force = Instance.new("BodyForce") body_force.Force = (target_position - part.Position) * force_factor * part:GetMass() body_force.Parent = part
Docs here: https://developer.roblox.com/en-us/api-reference/class/BodyForce
More information about BodyMovers here: https://developer.roblox.com/en-us/articles/BodyMover
Here's an awesome projectile script I made! It is completely functional under a LocalScript but you can work to configure it so that it replicates it to the server!
local Workspace = workspace or game:GetService("Workspace") local Players = game:GetService("Players") local RunService = game:GetService("RunService") local Debris = game:GetService("Debris") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer local Character = LocalPlayer.Character local Mouse = LocalPlayer:GetMouse() local function LaunchProjectile(Origin) local Projectile = Instance.new("Part",Character) Projectile.Anchored = true Projectile.CanCollide = false Projectile.BrickColor = BrickColor.new("White") Projectile.FormFactor = 3 Projectile.Name = ("Projectile") Projectile.Material = Enum.Material.Neon Projectile.Size = Vector3.new(1,1,1) Projectile.Transparency = 0 Projectile.TopSurface = 0 Projectile.BottomSurface = 0 Origin = (typeof(Origin) == "Vector3" and CFrame.new(Origin)) or (typeof(Origin) == "CFrame" and Origin) Projectile.CFrame = Origin local Scale = .1 local PositionId = 0 --coroutine.resume(coroutine.create(function() Projectile.Anchored = false local DirectionalPart = Instance.new("Part",Workspace) DirectionalPart.Anchored = true DirectionalPart.CanCollide = false DirectionalPart.Name = ("Direction") DirectionalPart.Material = Enum.Material.Neon DirectionalPart.Transparency = 1 local RayObject = Ray.new(Origin.Position,(Mouse.Hit.Position - Projectile.CFrame.Position).Unit * 500); local Hit,Position,Normal = Workspace:FindPartOnRay(RayObject,Projectile) DirectionalPart.BottomSurface = 10 DirectionalPart.TopSurface = 10 local Distance = (Projectile.CFrame.Position - Position).Magnitude DirectionalPart.Size = Vector3.new(.1,.1,.1) DirectionalPart.CFrame = CFrame.new(Projectile.CFrame.Position,Position) * CFrame.new(0,0,0) Projectile.CFrame = DirectionalPart.CFrame DirectionalPart:Destroy() local BodyVelocity = Instance.new("BodyVelocity") BodyVelocity.MaxForce = Vector3.new(1e9,1e9,1e9) BodyVelocity.Velocity = Projectile.CFrame.LookVector * 125 BodyVelocity.Parent = Projectile local HitDebounce = false Debris:AddItem(Projectile,15) wait() local HitEvent = Projectile.Touched:Connect(function(Hit) if HitDebounce == true then return end HitDebounce = true --[[ Do hit stuff here. ]] HitDebounce = false Projectile.Anchored = true Projectile.Transparency = 1 wait(8) Projectile:Destroy() end) --end)) end UserInputService.InputBegan:Connect(function(InputObject,GPE) if GPE then return end if InputObject.UserInputType == Enum.UserInputType.MouseButton1 and InputObject.UserInputState == Enum.UserInputState.Begin then LaunchProjectile(Character.Head.CFrame * CFrame.new(0,3,0)) end end)
raid6n had the correct version of this code but I'm just adding CFrames to it since that's what you wanted.
while true do local part = script.Parent part.CFrame= CFrame.new(part.Position) * CFrame.new(0,0,1) --the number depends on which direction it's going end
You can also use lookVectors to make it continue in the direction it's going but I'm not so good with those.
Simply lerp the parts CFrame in a loop such as a Heartbeat loop or a While loop.