You could simply make a detection (something like magnitude to check the distance between the player and missile) to see if the player is nearby and then make the missile explode if the player is nearby.
try set network owner to the player it is aiming to.
basically do:
part:SetNetworkOwner(plr) – in the () you need to put the player, and not their character.
1st use renderStepped and set network ownership to the player. That is what is causing the twitching due to latency. Also the CFrame scripts can cause the missile to jump over the player. Rather I would clamp max move amount which is in your case 5 to the distance between the player and the missile. This would allow it to remain 5 a majority of the time. However, in the case the player is close by it will go lower then 5 going to the distance between the player and missile, preventing it to jump over the player.
Also I don’t believe you have to multiply the lookVector by a Vector3. Since if it theoretically outputted (1,0.3,0.7), timings that by Vector3.new(5,5,5) and 5 would result in the same output.
while wait() and Stepped are two different things. wait() is much slower. If you every experience further latency try doing the script in a the local script and setting network ownership to the player so u can use RenderStepped