привет, у меня в unity есть скрипт для передвижение объекта он работает хорошо только когда камера не повернута и ее rotation равен 0, мне нужно изменить его так чтобы еще учитывалось ротация камеры, и при этом он работал также правильно
public class ParticleController : MonoBehaviour
{
public ParticleSystem particleSystem; // Ссылка на вашу систему частиц
public Collider colliderTrigger; // Ссылка на вашу систему частиц
public Camera mainCamera; //Ссылка на основную камеру
public float distanceFromCamera = 5f; // Расстояние от объекта до камеры по оси Z
public float rotationSpeedX = 5f; // Скорость вращения по оси X
public float rotationSpeedY = 5f; // Скорость вращения по оси Y
public AudioSource audioSource;


public Transform pivot; // Пивот, вокруг которого будет вращаться объект

private bool isInitialize;

public void Initialize(Camera camera)
{
    mainCamera = camera;
    isInitialize = true;
}

private void Update()
{
    if (!isInitialize)
        return;

    MoveWithMouse();

    // Проверяем, удерживается ли левая кнопка мыши
    if (Input.GetMouseButton(0)) // ЛКМ удерживается
    {
        // Запускаем систему частиц, если она не воспроизводится
        if (!particleSystem.isPlaying)
        {
            MoveWithMouse();
            particleSystem.Play();
            audioSource.Play();
            colliderTrigger.enabled = true;
        }
    }

    // Проверяем, отпущена ли левая кнопка мыши
    if (Input.GetMouseButtonUp(0)) // ЛКМ отпущена
    {
        // Останавливаем систему частиц
        if (particleSystem.isPlaying)
        {
            audioSource.Stop();
            particleSystem.Stop();
            colliderTrigger.enabled = false;
        }
    }
}

private void MoveWithMouse()
{
    // Получаем позицию мыши на экране
    Vector3 mousePosition = Input.mousePosition;

    // Преобразуем экранные координаты мыши в мировой координаты
    Ray ray = mainCamera.ScreenPointToRay(mousePosition);

    // Находим точку пересечения луча с плоскостью на заданном расстоянии от камеры
    Vector3 worldPosition = ray.GetPoint(distanceFromCamera);

    // Ограничиваем позицию, чтобы она оставалась в пределах видимости камеры
    ClampPosition(worldPosition);

    // Устанавливаем позицию системы частиц
    SetPosition(worldPosition);

    // Рассчитать вращение объекта на основе положения мыши на экране
    float normalizedX = (mousePosition.x / Screen.width - 0.5f) * 2;
    float normalizedY = (mousePosition.y / Screen.height - 0.5f) * 2;

    // Вычисляем углы поворота с учетом отдельных скоростей
    float rotationX = -normalizedY * rotationSpeedX;  // Инвертируем Y
    float rotationY = normalizedX * rotationSpeedY;    // Оставляем X как есть

    // Применяем вращение к пивоту, чтобы объект вращался вокруг него
    pivot.localRotation = Quaternion.Euler(rotationX, rotationY, 0); // Вращаем пивот
}

private void SetPosition(Vector3 newPosition)
{
    transform.position = newPosition; // Установка позиции объекта
}

private void ClampPosition(Vector3 worldPosition)
{
    // Получаем границы камеры
    float halfHeight = mainCamera.orthographicSize;
    float halfWidth = halfHeight * mainCamera.aspect;

    // Ограничиваем позицию по X и Y чтобы объект оставался в пределах видимости камеры
    float clampedX = Mathf.Clamp(worldPosition.x, -halfWidth, halfWidth);
    float clampedY = Mathf.Clamp(worldPosition.y, -halfHeight, halfHeight);

    // Обновляем позицию
    transform.position = new Vector3(clampedX, clampedY, transform.position.z);
}
}