Начальное местоположение снаряда и скорость по каждой из осей это произведение координат точки на единичной полусфере взгляда игрока и какого-то коэффициента (в случае с местоположением - это насколько далеко снаряд будет спавниться от игрока, в случае со скоростью - это множитель скорости, для стрелы насколько знаю ещё и урона). Координаты точки на единичной полусфере с центром в (0;0;0), соответствующей взгляду игрока называются вектором взгляда.
Про то, как найти вектор взгляда написано тут (см. мои правки):
https://ruforum.mineland.net/threads/nedogajd-sinus-kosinus-vektor-vzgljada.1559/#post-9692
Если коэффициент местоположения снаряда недостаточно большой (сфера возможных точек пересекается с хитбоксом игрока), можно:
1) увеличить его, но есть вероятность того, что при pitch близком к 0, снаряд будет проходить через стену (спавниться за стеной) или через близко стоящую сущность.
2) ограничить pitch (min = -max, если pitch > max, pitch = max; если pitch < min, pitch = min)
3) изменить форму возможных точек спавна. Например на цилиндр. Просто значения вектора x и z нужно брать не от сечения сферы в sin(pitch), а от сечения экватора (т.е единичной окружности), т.е просто не домножать на радиус. Очевидно, длина такого вектора уже не будет равна 1 при pitch отличном от 0, если снаряды запускаются часто, это будет заметно (и кому-то может быть не очень приятно).