projectile, missile, orbital, totem, beam, chainmissile) are invisible on their own: they move a point through the world and run skills as they go, so you decide what they look like and what they do.
@origin is the projectile’s current position. In onHit, the entities it hit are the inherited targets, so a line with no targeter acts on them.
Bullets
A custom projectile can carry something to look at withbullettype: ARROW, BLOCK or SMALLBLOCK (a block display), TEXT, MOB (a LodeEntities mob or vanilla entity riding along), or MODELENGINE (a model). The default, NONE, is invisible. setProjectileBulletModel changes the bullet’s custom model data mid-flight.
Firing on an animation frame
For an attack that leaves the mob’s hand on the right frame of its animation, call the skill from a keyframe in Blockbench rather than guessing adelay. See Animating Your Model.