The Touched Event should be able to help you. Maybe try this
Event.OnServerEvent:Connect(function(Player, pos)
local char = Player.Character
local Root = char.HumanoidRootPart
local Fire = RS.FireFist:Clone()
Fire.Parent = char
Fire.Position = Root.Position + Root.CFrame.LookVector *6
Fire.CFrame = CFrame.lookAt(Root.Position, pos)
local WasFireDestroyed = false
Fire.Touched:Connect(function(part)
-- Checks if they are a player or not
if (part.Parent:FindFirstChild("Humanoid")) then
-- This makes sure that it doesn't get destroyed
-- by touching the player that caused the fire in animation
-- but it will be destroyed by other players
if (Player.Name ~= part.Parent.Name) then
WasFireDestroyed = true
Fire:Destroy()
end
else
WasFireDestroyed = true
Fire:Destroy()
end
end)
local info = TweenInfo.new(20)
local tween = TS:Create(Fire, info, {Position = Fire.CFrame.LookVector * 1000})
tween:Play()
-- I also recommend keeping this in because if it doesn't touch anything and say,
-- the player shoots it up into the air then it could be there forever.
wait(20)
if (not WasFireDestroyed) then
Fire:Destroy()
end
end)
This is a common problem in roblox. If you want to achieve the same effect without using Anchor, just use BodyPosition. This will keep the part in place (assuming you set it’s force high enough) and it will also simulate physics. Also you will not need to tween the position, just set the target position in the BodyPosition and the part will move there.
This is my suggestion yes. You can use BodyVelocity too, it’s just that BodyPosition is more similar to the TweenService because you just set a position.