Вот код
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
- угол поворота.
Принципиальная разница в том, что углами Эйлера мы поворачиваем систему координат, а с помощью кватернионов задаем вектор оси и доворачиваем на нужный угол.
Советую вам потратить время и разобраться с математикой, потом будет гораздо проще (проверено на личном примере).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу реализовать хранимую процедуру, которая будет принимать название таблицы, колонки и значение для повышения производительности, тк
Возможно ли перенести триггеры в другую(точно такую же) таблицу в MySQL? У меня есть таблица test, со временем я её архивирую и на ее месте создаю...
Можно ли в MySQL создать столбец, в котором дата будет по умолчанию вычисляться как "дата1 + некоторое количество дней"? Например, у меня есть...