ArtemS, дочерние объекты следуют относительно своим локальным координатам, которые задаются через localPosition, localRotation, localScale. Но, для того, чтобы "пуля летела из носа корабля" не нужно никаких дочерних объектов. Просто в момент создания пули нужно задать позицию и поворот корабля, то есть как-то так:
Код
Transform newAmmo = Instantiate(ammoPrefab);
newAmmo.position = mainShip.position;
newAmmo.rotation = mainShip.rotation;
А чтобы пуля летела вперед, нужно её двигать относительно её вращения. Для 3D это выглядит так:
Код
Vector3 newPos = transform.position + (transform.forward * moveSpeed * Time.fixedDeltaTime);
Для 2D:
Код
Vector2 newPos = (Vector2)(transform.position + (transform.up * moveSpeed * Time.fixedDeltaTime));
Если пуля не использует физику (быть такого не может, но вдруг), то нужно задавать новую позицию через transform.position. Если же пуля использует физику, то задавать полученные координаты newPos нужно через методы MovePosition, которые содержит любой Rigidbody и Rigidbody2D.
А также маленький совет: лучше всего делать коллайдеры пуль триггерами, так удобней всего определять дальнейшее действие в зависимости от объекта, с которым пуля соприкоснулась. Например, не учитывать столкновение с тем кораблем, откуда была выпущена пуля.