There’s this neat little setting for particle systems where you can define a “Stop Action” and set it to “Destroy”, so a one-off particle effect will clean up after itself
Also, I didn’t think so much about using GetAimLocation()
. Instead I did it like this:
if (null != hitEffect)
{
Vector3 closestPoint = other.ClosestPoint(transform.position);
GameObject effect = Instantiate(hitEffect, closestPoint, transform.rotation);
effect.transform.parent = null;
}
Note that I explicitly set the effect’s parent
to null
, so effectively decoupling it from the projectile so the particle effect can play to its end while the projectile is already destroyed.
(OTOH I defined a delay for destroying projectiles, so an arrow sticks in its target for a moment before it disappears…)