I can see where you’re coming from, but in my game, the bullet system gets a bit complicated…
Here’s the process of creating a “bullet spawner,” a temporary object that’s used to shoot bullets:
First, I made this function, which sets in the values:
Then, I create the bullet spawner at a position using create and calling said function to lock in the values. The bullet spawner only exists for a single frame before deleting itself, just long enough to fire the bullets. I can use this system to have any type of enemy shoot bullets easily, as you can see, I have the bullets shooting from the enemy’s mouth.
The bracketed code is the one being shown in the GIFs provided here.
Then, in another external event, this determines handling the bullet’s properties so that they apply correctly. Here, the bullet spawner is transferring it’s values to the bullets it creates:
And FINALLY, here’s the system that determines the bullet’s lifespan. It’s lifespan value loses 1 each frame, and once it’s lifespan value reaches 0, it’s “health” changes to 0, where the game then deletes it.
I’ll run a more specific test to showcase the issue again just in case:
This is what’s supposed to happen, the bullets all die at the same place:
If I tab out, the bullets travel too far:
If the player attacks, the bullets die too early:

Because of how complex my bullet system is, with the ability to change the amount of shots fired, random variances, various bullet properties, and more, is it still recommended to retrofit the positioning suggestion you provided? And if so, what would be the best way to do so?
Also, if anybody could see a potential problem with my system and why it’s working the way it is (Based on the screenshots provided), is there a better way I can implement lifespan for my bullets? Or is this some kind of bug within the engine itself?
EDIT: When tinkering a bit, it seems that it scales with the FPS. Apparently, even the TEENIEST TINIEST dip in FPS, even if it’s just 1 frame, throws off the whole thing? Or maybe I’m wrong?
Is there a way to combat framerate issues in this case? Like applying TimeDelta() in places where it should be?
If this is all too complex, I can share the project if you’d like to see for yourself