Instead of making the arrows follow an explicit curve, I suggest simulating the arrow step by step.
What you need to store is a position (with x,y,z coordinates, starting off at the archer's location) and a velocity (also with x,y,z coordinates, starting off as some constant times the direction the player is looking), and some scene gravity (also with x,y,z coordinates, but it'll probably point straight down).
When the simulation progresses by a timestep of t
, add t
times the velocity to the position, then add t
times gravity to the velocity.
This way, you're free to do more interesting things to the arrow later, like having wind act on it (add t
times wind to the velocity) or having air resistance act on it (multiply velocity by t
times some value a bit smaller than 1) or redirecting it (change velocity to something else entirely) without having to recalculate the path of the arrow.