Как можно изменить центр вращения?

Всех приветствую! Прошу помочь, в решении казалось бы довольно простой проблемы, ситуация такая, персонаж поворачивается в сторону курсора, но так как оружие у него расположено слева и оно является дочерним объектом персонажа, то соотвественно центр вращения берётся от персонажа, из за чего при стрельбе пули летят левее от курсора, мне нужно отрегулировать центр вращения таким образом чтобы персонаж вместе с оружием и точкой вылета пуль при повороте по оси Z в сторону курсора смотрел дулом оружия точно в кончик курсора, в таком случае пули должны пройти точно без смещения в сторону, попадая точно в расположение курсора. Визуальный пример я предоставил ниже, так же приложу скрипт персонажа в котором имеется функция вращения для представления. Пример того как сейчас всё реализовано

public float moveSpeed = 5f; // Скорость перемещения персонажа
public float inertia = 0.1f; // Значение инерции для плавного перемещения

private Rigidbody2D rb; // Ссылка на Rigidbody2D компонент персонажа
private Vector2 movementInput; // Ввод направления движения от игрока
private Vector2 currentVelocity; // Текущая скорость персонажа

private void Start()
{
    rb = GetComponent<Rigidbody2D>(); 
}

private void Update()
{
    // Получаем ввод по горизонтали (-1, 0, 1) и по вертикали (-1, 0, 1)
    movementInput.x = Input.GetAxisRaw("Horizontal");
    movementInput.y = Input.GetAxisRaw("Vertical");

    // Целевая скорость перемещения
    Vector2 targetVelocity = movementInput * moveSpeed;
    // Применяем инерцию для плавного перемещения
    rb.velocity = Vector2.SmoothDamp(rb.velocity, targetVelocity, ref currentVelocity, inertia);

    // Вращение курсора
    RotateTowardsCursor();
}

private void RotateTowardsCursor()
{
    // Получаем координаты мыши
    Vector3 mousePosition = Input.mousePosition;
    mousePosition.z = Camera.main.transform.position.z;

    // Переводим в координаты мира
    Vector3 worldMousePosition = Camera.main.ScreenToWorldPoint(mousePosition);

    // Находим вектор направления от объекта до мыши
    Vector3 direction = worldMousePosition - transform.position;

    // Получаем угол в радианах и переводим в градусы
    float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;

    // Меняем угол поворота объекта
    transform.eulerAngles = new Vector3(0, 0, angle);
}

}


Ответы (1 шт):

Автор решения: MBo

Вращение вокруг точки, в которой прикреплено оружие, будет выглядеть .... необычно.

Вместо этого рассчитайте угол поворота таким образом, чтобы оружие было направлено на цель.

Например, если оно, как на рисунке, расположено на краю окружности радиуса R и расположено по касательной к окружности, а расстояние от центра окружности до цели D, то нужна будет угловая поправка у вашему angle

dAngle = asin(R/D)
→ Ссылка