Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 17.01.2018
Сообщений: 50

Найти угол между двумя объектами

11.02.2020, 22:06. Показов 7822. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Ввожу в курс дела (Unity 2d). Необходимо вычислить угол между двумя объектами: игроком и прицелом (рисунок 1). Для чего это нужно? Для того, чтобы при создании пули в игре, она поворачивалась лицевой стороной к прицелу (ну, и, соответственно, летела в сторону прицела). Я сделал некий код, который ДАЖЕ работает, но, во-первых, убеждён, что написан он не очень хорошо (плюс, не совсем понимаю, как он работает), во-вторых, изредка пуля летит в самого игрока.
Отрывок из кода на C#:

C#
1
2
3
4
5
6
7
8
9
10
11
12
// Определение
rb = GetComponent<Rigidbody2D>();
sr = GetComponent<SpriteRenderer>();
 
// Именно эта часть кода и вызывает вопросы
 
Vector2 vecCam = Camera.main.transform.position; // Местоположение камеры
Vector2 vecPlayer = new Vector2(rb.transform.position.x + (sr.bounds.size.x * (crosshair.transform.position.x > rb.transform.position.x ? 1 : -1) ) , rb.transform.position.y); // Местоположение игрока с учётом размеров спрайта по оси x
Vector2 vecToCross =  (Vector2) crosshair.transform.position - vecCam; // Местоположение прицела по отношению к камере
Vector2 vecTest = new Vector2(rb.transform.position.x +  vecToCross.normalized.x, rb.transform.position.y + vecToCross.normalized.y); // специальный вектор для спавна пули (рисунок 2)
float angleBulZ = Vector2.SignedAngle(vecPlayer - vecCam, vecToCross); // угол между двумя объектами                
Instantiate(obj, vecTest, Quaternion.Euler(0,0,angleBulZ)) // obj - это пуля
Рисунок 1:


Рисунок 2:


Заранее благодарю!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2020, 22:06
Ответы с готовыми решениями:

Как узнать угол в градусах между двумя обьектами с вершиной в 3 обьекте
На рисунке видно что угол равняется 90*, как с помощью программирования узнать этот угол, имея вектора данных точек. Например имееются...

Как узнать угол в градусах между двумя обьектами из одной точки
Как узнать угол в градусах между двумя обьектами из одной точки? На рисунке видно, что угол между обьектами y и x из точки 0 равняется 90*....

Создание связей между объектами
Здравствуйте! Пользуюсь Unity Personal 5.3.5f1 язык C#. Есть prefab шара. При нажатии на кнопку он появляется (их можно создавать не...

3
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
11.02.2020, 22:58
http://www.unity3d.ru/distribu... =5&t=45186
Можно по-другому:
C#
1
2
3
4
5
        Vector3 direction = crosshairPos - playerPos;
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        var ea = bullet.eulerAngles;
        ea.z = angle + angleCorrect;
        bullet.eulerAngles = ea;
Если нос спрайта лежит на оси right, то angleCorrect == 0, если на оси up, то -90 и т.д.
0
0 / 0 / 0
Регистрация: 17.01.2018
Сообщений: 50
11.02.2020, 23:43  [ТС]
1max1, Извините, какого типа у вас переменная bullet?
У меня тип GameObject, но найти свойство "eulerAngles" не могу

0
 Аватар для 1max1
3362 / 1775 / 1028
Регистрация: 26.10.2018
Сообщений: 5,204
12.02.2020, 00:02
bullet.transform.eulerAngles
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.02.2020, 00:02
Помогаю со студенческими работами здесь

Как проверить дистанцию между игроком и объектами?
Как проверить дистанцию между игроком и объектами с определенным тегом, то есть у меня есть объекты с тегом AI, и мне надо проверить какой...

Нужен скрипт, реагирующий на расстояния между объектами
Подскажите пожалуйста нужен скрипт который будет реагировать на расстояния между обьектами, к примеру этот обьект до которого считать...

После рестарта дистанция между объектами равна 0
Привет всем у меня есть такой скрипт: using System.Collections; using System.Collections.Generic; using UnityEngine; using...

Найти расстояние между двумя объектами на земном шаре
Люди перемещаются по поверхности нашей планеты. Они ходят, бегают, ездят и даже летают. И им всегда важно расстояние до объекта, пусть даже...

Найти угол между двумя прямыми
Нужно найти угол между двумя прямыми, при условии что заданы координаты точек прямых. Например:даны 2 прямые: AB и BC; и известны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru