Посмотрите в эту сторону, эту реализацию использовал на голове танка (главное условие было крутить голову локально, по координатам камеры глобальным), что бы она правильно крутилась. Дуло смотрит туда куда смотрит камера, учитывается поворот самого танка. (тут убрана интерполяция).
gun.localRotation = Quaternion.AngleAxis(_cacheCamera.eulerAngles.y - transform.eulerAngles.y, Vector3.up)