Unity 2D как предотвратить вращение объекта в зависимости от мировых координат?

#c# #unity3d

Вопрос:

Я работаю над 2D-игрой сверху вниз. Игрок должен уметь стрелять стрелами, поэтому внутри сборного плеера у меня есть пустой объект для прицела и перекрестия (рисунок 3). У меня есть сценарий для перекрестия, который следует за положением мыши. У меня есть пустой объект, который является дочерним компонентом проигрывателя под названием FirePoint. Все, для чего это нужно, — это расположение экземпляра сборного модуля со стрелкой.

ПРОБЛЕМА: Этот объект с огневой точкой, похоже, вращается в зависимости от положения в мире. Обратите внимание на рисунок 1. символ находится в нижней левой области, красная ось должна быть направлена вверх и вправо от курсора, но вместо этого указывает вниз и влево. Затем на рисунке 2 его нижний правый угол. Та же проблема для верхней правой/левой части карты. Мне нужно, чтобы эта огневая точка не вращалась в зависимости от положения в мире.

Если символ равен 0,0, он работает просто отлично. Но как только я перемещу позиции, огневая точка будет вращаться в зависимости от положения в мире, а затем испортит мою стрельбу.

Как мне предотвратить все вращения, так как у меня есть скрипт для отслеживания курсора? Почему он вращается в зависимости от мирового положения? Почему пустой объект вращается в зависимости от положения в мире?

Преобразование огневой точки 1
Преобразование огневой точки
Преобразование огневой точки 3

 void Update()
{
    Vector2 mouseCursorPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    transform.position = mouseCursorPos;
    
    angle = Mathf.Atan2(mouseCursorPos.y, mouseCursorPos.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
}
 

Комментарии:

1. Чтобы просто определить направление, не можете ли вы просто взять точку нажатия и позицию игрока, вычесть их и нормализовать? Это даст вам вектор направления, указывающий на местоположение, которое было нажато, независимо от любых других углов/положений.

2. Как справедливо сказано в приведенном выше комментарии @TEEBQNE, так и должно быть, поскольку дочерние преобразования обязательно будут вращаться вместе с родительским преобразованием. Более того, было бы разумно зафиксировать ссылку Camera.main на некоторую локальную переменную вместо того, чтобы вызывать ее в Update методе.