I am trying to make a projectile (Energy ball) for my game. I am using body velocities, but the issue is is that it seems laggy. I shoot it then half a second through flight it seems to stop in mid air for a quarter of a second then continue. This only happens the first minute of playing. I tested shooting at the ground so at an angle so it will go slower, but it seems the the ball freezes when it reaches a certain distance from the player, not a certain time.
The actual projectile is a less transparent ball inside of a bigger, more transparent ball, connected by a weld. If I remove one of the balls so the projectile is just one ball, my issue is gone. How can I remove the issue while keeping both balls?
Here is my code that I tried:
EnergyBallEvent.OnServerEvent:Connect(function(Player, MouseClickLocation) local Character = Player.Character local Humanoid = Character:FindFirstChildWhichIsA("Humanoid") if Humanoid.Health > 0 and not DisabledItems[Player.UserId..'EnergyBall'] then DisabledItems[Player.UserId..'EnergyBall'] = true Humanoid:LoadAnimation(script.EnergyBallAnimation):Play() local Ball = Instance.new("Part", SpellsFolder) local CasterValue = Instance.new("ObjectValue", Ball) CasterValue.Name = "Caster" CasterValue.Value = Player.Character Ball:SetNetworkOwner(nil) --removing or modifying this Ball.Transparency = 1 Ball.Shape = Enum.PartType.Ball Ball.BrickColor = BrickColor.new(0, 255, 255) Ball.Material = Enum.Material.Neon Ball.Size = Vector3.new(2.2, 2.2, 2.2) Ball.Massless = true Ball.CanCollide = false local Weld = Instance.new("Weld", Ball) Weld.Part0 = Ball Ball = Instance.new("Part", Ball) Ball:SetNetworkOwner(nil) --or this have no effect that is visible Ball.Transparency = 1 Ball.Shape = Enum.PartType.Ball Ball.BrickColor = BrickColor.new(0, 255, 255) Ball.Material = Enum.Material.Neon Ball.Size = Vector3.new(1.6, 1.6, 1.6) Ball.Massless = true Weld.Part1 = Ball Weld = Instance.new("Weld", Ball) Weld.Part0 = Ball if Character:FindFirstChild("LeftHand") then Weld.Part1 = Character.LeftHand else end for i = 0, 40, 1 do Ball.Transparency = Ball.Transparency - 0.012 Ball.Parent.Transparency = Ball.Parent.Transparency - 0.006 wait(0.02) end Weld:Destroy() local Motion = Instance.new("BodyVelocity", Ball) Motion.Velocity = ((MouseClickLocation - Player.Character.HumanoidRootPart.Position).Unit*100) DisabledItems[Player.UserId..'EnergyBall'] = nil end end)
Here is some more code I tried:
nergyBallEvent.OnServerEvent:Connect(function(Player, MouseClickLocation) local Character = Player.Character local Humanoid = Character:FindFirstChildWhichIsA("Humanoid") if Humanoid.Health > 0 and not DisabledItems[Player.UserId..'EnergyBall'] then DisabledItems[Player.UserId..'EnergyBall'] = true Humanoid:LoadAnimation(script.EnergyBallAnimation):Play() local Model = Instance.new("Model", SpellsFolder) local Ball = Instance.new("Part", Model) local CasterValue = Instance.new("ObjectValue", Model) CasterValue.Name = "Caster" CasterValue.Value = Player.Character Ball.Transparency = 1 Ball.Shape = Enum.PartType.Ball Ball.BrickColor = BrickColor.new(0, 255, 255) Ball.Material = Enum.Material.Neon Ball.Size = Vector3.new(2.2, 2.2, 2.2) Ball.Massless = true Ball.CanCollide = false local Weld = Instance.new("Weld", Ball) Weld.Part0 = Ball local Ball2 = Instance.new("Part", Model) Model.PrimaryPart = Ball2 Ball2:SetNetworkOwner(nil) Ball2.Transparency = 1 Ball2.Shape = Enum.PartType.Ball Ball2.BrickColor = BrickColor.new(0, 255, 255) Ball2.Material = Enum.Material.Neon Ball2.Size = Vector3.new(1.6, 1.6, 1.6) Ball2.Massless = true Weld.Part1 = Ball2 Weld = Instance.new("Weld", Ball2) Weld.Part0 = Ball2 if Character:FindFirstChild("LeftHand") then Weld.Part1 = Character.LeftHand else end for i = 0, 40, 1 do Ball2.Transparency = Ball2.Transparency - 0.012 Ball.Transparency = Ball.Transparency - 0.006 wait(0.02) end Weld:Destroy() local Motion = Instance.new("BodyVelocity", Ball) Motion.Velocity = ((MouseClickLocation - Player.Character.HumanoidRootPart.Position).Unit*100) DisabledItems[Player.UserId..'EnergyBall'] = nil end end)
I hate this behavior and I NEED to fix it
Another observation is if I comment out the second ball creation and stuff so it is a just one ball, the bug is gone