Индикаторы урона, следящие за противником

Программирование на Юнити.

Индикаторы урона, следящие за противником

Сообщение Makkarob 05 сен 2017, 16:33

Во многих шутерах есть индикаторы урона - такие полосочки, которые следят за врагом который попал в игрока - довольно неплохая вещь. Но как ее реализовать?
Понятно, что нужен Image, который будет становиться активным при попадании, повернуться в сторону откуда пришел урон и со временем выключаться.
Главный вопрос - КАКОЙ ЛУЧШИЙ СПОСОБ ПОЛУЧИТЬ УГОЛ на который он должен повернуться? Ведь таких индикаторов может быть много (лучше ограничить количество, скажем, до 5), а вычислять угол между игроком и противником в Update может быть довольно затратно по ресурсам.
Аватара пользователя
Makkarob
UNIт
 
Сообщения: 90
Зарегистрирован: 18 июл 2015, 14:22
Откуда: Украина, Харьков
Skype: Makkarob
  • Сайт

Re: Индикаторы урона, следящие за противником

Сообщение snezhok_13 05 сен 2017, 17:01

Вычислять угол не затратно. И индикатор по вычисляет угол между transform.forward и направлением откуда прилетела пуля. Нормализованный dot между этими векторами даст cos угла, можно сделать маппинг и без аркосинуса в радианах. dot (как и косинус) от -1 до 1 а радианы 0 до 2pi...
Разработка игр, немножко игровая журналистика, сейчас делаем Календарь: даты выхода игр
Аватара пользователя
snezhok_13
UNIверсал
 
Сообщения: 450
Зарегистрирован: 09 сен 2013, 11:12
Skype: s.coremission
  • Сайт

Re: Индикаторы урона, следящие за противником

Сообщение danquimby 06 сен 2017, 09:48

Makkarob писал(а):Во многих шутерах есть индикаторы урона - такие полосочки, которые следят за врагом который попал в игрока - довольно неплохая вещь. Но как ее реализовать?
Понятно, что нужен Image, который будет становиться активным при попадании, повернуться в сторону откуда пришел урон и со временем выключаться.
Главный вопрос - КАКОЙ ЛУЧШИЙ СПОСОБ ПОЛУЧИТЬ УГОЛ на который он должен повернуться? Ведь таких индикаторов может быть много (лучше ограничить количество, скажем, до 5), а вычислять угол между игроком и противником в Update может быть довольно затратно по ресурсам.


Прикалываешься ? на сайте есть отличный раздел "математика" там все подробно расписано с примерчиками.
http://unity3d.ru/distribution/viewtopic.php?f=11&t=16995
Пока компьютер еще не научился самостоятельно мыслить, доверять ему можно
Аватара пользователя
danquimby
UNIт
 
Сообщения: 54
Зарегистрирован: 29 янв 2015, 21:33
Откуда: Иваново
Skype: danquimby
  • Сайт

Re: Индикаторы урона, следящие за противником

Сообщение Makkarob 06 сен 2017, 14:45

danquimby писал(а):
Makkarob писал(а):Во многих шутерах есть индикаторы урона - такие полосочки, которые следят за врагом который попал в игрока - довольно неплохая вещь. Но как ее реализовать?
Понятно, что нужен Image, который будет становиться активным при попадании, повернуться в сторону откуда пришел урон и со временем выключаться.
Главный вопрос - КАКОЙ ЛУЧШИЙ СПОСОБ ПОЛУЧИТЬ УГОЛ на который он должен повернуться? Ведь таких индикаторов может быть много (лучше ограничить количество, скажем, до 5), а вычислять угол между игроком и противником в Update может быть довольно затратно по ресурсам.


Прикалываешься ? на сайте есть отличный раздел "математика" там все подробно расписано с примерчиками.
http://unity3d.ru/distribution/viewtopic.php?f=11&t=16995

Математика Unity3D (Урок 15). Vector Отражение, расстояние, проекция и угол.
Документ не найден - Error 404
Аватара пользователя
Makkarob
UNIт
 
Сообщения: 90
Зарегистрирован: 18 июл 2015, 14:22
Откуда: Украина, Харьков
Skype: Makkarob
  • Сайт

Re: Индикаторы урона, следящие за противником

Сообщение seaman 07 сен 2017, 00:38

А далее по сайту посмотреть не судьба?
https://poqxert.ru/blog/unity/tutorials ... iya-i-ugol
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Индикаторы урона, следящие за противником

Сообщение Makkarob 07 сен 2017, 19:26

seaman писал(а):А далее по сайту посмотреть не судьба?
https://poqxert.ru/blog/unity/tutorials ... iya-i-ugol


Vector3.Angle мне не подходит - если поднимать камеру вверх или опускать вниз индикатор вращается по кругу, хотя не должен. К тому же он не видит разницы справа объект или слева - в обеих случаях выдает 90 градусов.

Для меня работает так - создать Empty, сделать дочерним к камере, выставить вращение и позицию на ноль, затем:
Синтаксис:
Используется csharp
Empty.LookAt(target);
HitIndicator.rotation = Quaternion.Euler(0, 0, -Empty.localEulerAngles.y);
 

Но это явно не лучший способ - на один такой просчет уходит в среднем 3 ms.

Мне нужно что бы HitIndicator указывал на цель, при это вращаясь в диапазоне 0-360 градусов. Ну как в том же WOT. Но мой способ явно не лучший. Можете подсказать лучший вариант?
Последний раз редактировалось Makkarob 07 сен 2017, 20:33, всего редактировалось 1 раз.
Аватара пользователя
Makkarob
UNIт
 
Сообщения: 90
Зарегистрирован: 18 июл 2015, 14:22
Откуда: Украина, Харьков
Skype: Makkarob
  • Сайт

Re: Индикаторы урона, следящие за противником

Сообщение Cr0c 07 сен 2017, 19:52

А если вектор на дамаг умножать на обратный rotation камеры и задавать его напрямую индикатору дамага? С обнулением Y компоненты, конечно же.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Индикаторы урона, следящие за противником

Сообщение Makkarob 07 сен 2017, 21:43

Cr0c писал(а):А если вектор на дамаг умножать на обратный rotation камеры и задавать его напрямую индикатору дамага? С обнулением Y компоненты, конечно же.


Не совсем понял, что вы предлагаете?

Синтаксис:
Используется csharp
transform.position * target.position * -camera.transform.rotation.eulerAngles?
 


Вот так что ли?
Аватара пользователя
Makkarob
UNIт
 
Сообщения: 90
Зарегистрирован: 18 июл 2015, 14:22
Откуда: Украина, Харьков
Skype: Makkarob
  • Сайт

Re: Индикаторы урона, следящие за противником

Сообщение Cr0c 07 сен 2017, 23:19

Берём проекцию вектора на противника на плоскости XZ, поворачиваем на угол (-камера) - получаем вектор, который будет направлением для damage.up спрайта дамага damage. Например: если вектор дамага совпадает с направлением камеры - он будет смотреть вверх на UI.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Индикаторы урона, следящие за противником

Сообщение Makkarob 08 сен 2017, 10:11

Cr0c писал(а):Берём проекцию вектора на противника на плоскости XZ, поворачиваем на угол (-камера) - получаем вектор, который будет направлением для damage.up спрайта дамага damage. Например: если вектор дамага совпадает с направлением камеры - он будет смотреть вверх на UI.


Вы могил бы написать пример СКРИПТОМ? Я понятия не имею как брать проекцию на плоскости, да еще плоскости без Y-координаты.
Аватара пользователя
Makkarob
UNIт
 
Сообщения: 90
Зарегистрирован: 18 июл 2015, 14:22
Откуда: Украина, Харьков
Skype: Makkarob
  • Сайт


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15