Cool gameplay loop! I'd recommend using a Raycast for the arrow firing direction - that way the player could be on sloped terrain without impacting aim, and you could add cool stuff like environmental hazards for the player to trigger - take a look at my project files if you want an (admittedly rushed) Raycast example (the CalculateMousePositionForWeaponAim() method in PlayerMovement.cs)