Как вариант можно добавить пули к родительскому объекту, тогда станет доступно изменение локальных координат пуль.
Юнити при вращении родительского объекта будет трансформировать позицию дочернего объекта в мировые координаты с учётом локальных.
Допустим создали объект с localPosition (2, -5, 0), и если у родителя мировые координаты (5, 30, 0), то у дочернего объекта мировые координаты после сложения будут (7, 25, 0). Также и вращение.
Пример:
GameObject go = Instantiate(bullet, bulletSpawnPos.transform); // второй параметр это родитель
go.transform.localPosition = spawnPos / 2; // задали локальную позицию. Вращение применится от родителя.
bulletSpawnPos тоже должен быть дочерним по отношению к персонажу, наверное он прикреплён к руке? Либо самому нужно поворачивать bulletSpawnPos.
Но теперь дочерним пулям будут добавляться трансформации от родителя-персонажа. Если он будет прыгать, то и пули будут прыгать.
Можно отвязать дочерние объекты так:
bulletSpawnPos.transform.DetachChildren();