Вот код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Gun : MonoBehaviour
{
private Vector3 mousePosition;
public GameObject bullet;
public GameObject bulletSpawn;
private float headRotation;
public static float rotation_z;
private void Start()
{
headRotation = transform.localRotation.z; // при transform.rotation.z возвращает тот же угол
Debug.Log("Z rotaton: " + transform.rotation.z);
}
void Update()
{
mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
// поворот пушки
var difference = mousePosition - transform.position;
var angle = 90;
difference.Normalize();
// вычисление угла
rotation_z = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;
// поворачиваем
float additionalAngle = 0;
if (headRotation == 90)
additionalAngle = 0;
else if (headRotation == -90)
additionalAngle = 180;
else if (headRotation == 0)
additionalAngle = -90;
transform.rotation = Quaternion.Euler(0f, 0f, rotation_z + additionalAngle);
Мои спрайты имеют разный угол, однако выполняют оду и туже роль. Атлас довольно большой и поэтому я решил написать пару if для решения проблемы с разными углами. Однако, когда я взял данные об угле, ожидая увидеть угол z из инспектора, обнаружил угол 0,7071068, вместо 90 (и -0,7071068 при -90). Что произошло? Где он взял этот угол?
Для того, чтобы понять, как работают повороты объектов в Unity (да и не только в Unity), придется окунуться в пространственную геометрию.
Что такое поворот? Это изменение положение объекта относительно некой оси.
Как можно описать поворот? Двумя способами:
Используя углы Эйлера - рысканье, тангаж и крен. По ссылке - краткий экскурс для начала.
Используя кватернионы - аналогично.
Кватернион кодируется 4-мя числами - {x, y, z, w}, где {x, y, z} - вектор оси поворота, а w - угол поворота.
Принципиальная разница в том, что углами Эйлера мы поворачиваем систему координат, а с помощью кватернионов задаем вектор оси и доворачиваем на нужный угол.
Советую вам потратить время и разобраться с математикой, потом будет гораздо проще (проверено на личном примере).
Продвижение своими сайтами как стратегия роста и независимости