I have made a tower defense test before and I found my self anchoring the towers instead and changing their primary part CFrame to look at the enemies on the x and z axis rather than using body gyros. Also body gyro is deprecated now in favor of AlignOrientation.
Models have a SetPrimaryPartCFrame (and GetPrimaryPartCFrame) function that requires the model to have a primary part to work.
Anchor the tower and use this to make the tower look at the enemy.
local tower = workspace.tower -- the tower
local enemy = workspace.enemy -- the enemy
-- and most importantly, the look at cframe
local look = CFrame.lookAt(torso.Position, enemy.Torso.Position)
local matrix = CFrame.fromMatrix(torso.Position, -look.XVector, torso.CFrame.YVector, -look.ZVector)
tower:SetPrimaryPartCFrame(matrix)
-- if its looking in the wrong direction make the vectors positive instead of negative
BodyGyro is deprecated, do not use it for new work. Use AlignOrientation which is functionally similar.
AlignOrientation will actually make it easier for you to implement what you wanted, whereas with a BodyGyro you would have to update the CFrame each frame.