I’m trying to make a tower defense game and for some reason some units just randomly dissapear.
I use lerp to go between points.
I know it’s not connected to network ownership but i know my current code is intensive but it doesn’t always remove units under high stress.
local enemy = {}
local waypoints = workspace.Waypoints
local RunService = game:GetService("RunService")
local ServerStorage = game:GetService("ServerStorage")
function enemy.LerpTo(model, target)
local alpha = 0
local speed = model:FindFirstChildOfClass("Humanoid").WalkSpeed
local distance = (model.PrimaryPart.Position - target.Position).Magnitude
local relativeSpeed = distance / speed
local startCFrame = model.PrimaryPart.CFrame
local loop = nil
local reachedTarget = Instance.new("BindableEvent")
loop = RunService.Heartbeat:Connect(function(delta)
local goalCFrame = startCFrame:Lerp(target.CFrame, alpha)
model:PivotTo(goalCFrame)
alpha += delta / relativeSpeed
if alpha >= 1 then
loop:Disconnect()
reachedTarget:Fire()
end
end)
reachedTarget.Event:Wait()
end
function enemy.Navigate(model)
enemy.LerpTo(model,waypoints.Start)
for i=1, #waypoints:GetChildren()-2 do
enemy.LerpTo(model, waypoints[i])
print("Loop",i)
end
enemy.LerpTo(model,waypoints.End)
model:Destroy()
print("destroyed unit")
end
function enemy.Spawn(name, amount)
local enemyExists = ServerStorage.Enemies:FindFirstChild(name)
if enemyExists then
for i=1, amount do
task.wait(0.5)
local newEnemy = enemyExists:Clone()
newEnemy:PivotTo(waypoints.Start.CFrame)
newEnemy.Parent = workspace.Hostiles
for i, object in ipairs(newEnemy:GetDescendants()) do
if object:IsA("BasePart") then
object.CollisionGroup = "Enemy"
end
end
coroutine.wrap(enemy.Navigate)(newEnemy)
end
else
warn("No enemy found")
end
end
return enemy
Above is the code used for the units.
When they dissapear they don’t dissapear because of the destroy call.