XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
agentex

offline
Опыт: 34,834
Активность:
Узнать, повернут ли юнит в сторону точки
Долго ломал голову над этой задачей но безрезультатно.
Нужно проверить, обращен ли юнит к определенной точке или нет.
разность максимального и минимального угла поворота в сторону от точки должна быть примерно 120 градусов
надеюсь понятно что я этим хотел сказать =\
Старый 21.10.2008, 16:48
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Функция AngleBetweenPoints - сравнивай возвращаемое значение с unit facing.
Старый 21.10.2008, 17:07
agentex

offline
Опыт: 34,834
Активность:
хотелось бы без этой функции обойтись, она порождает кучу утечек
Старый 21.10.2008, 19:41
adic3x

offline
Опыт: 108,439
Активность:
нету в ней утечек, просто она неоптимальна... хоче по кулхацкерски, проведи вектор из одной точки в другую и вызови
Код:
Atan2(vecY, vecX)
vecX?y могут быть получены через вычитания одной координаты из другой
Старый 21.10.2008, 19:48
agentex

offline
Опыт: 34,834
Активность:
мм мне казалось тут нужна тригонометрия... а ее я не оч знаю
кста я не могу представить что это за угол между точками мне казалось он всегда 0 или 180 оО
ну всмысле от чего он берется

agentex добавил:
ADOLF провести вектор это значит выполнить: х1 - х2 ; у1 - у2 ?

agentex добавил:
а все понял какой угол возвращает AngleBetweenPoints просто нужно мысленно провести прямую через первую точку)
Старый 21.10.2008, 19:52
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
провести вектор это значит выполнить: х1 - х2 ; у1 - у2 ?

да

Код:
function AngleBetweenPoints takes location locA, location locB returns real
    return bj_RADTODEG * Atan2(GetLocationY(locB) - GetLocationY(locA), GetLocationX(locB) - GetLocationX(locA))
endfunction


вот так работает сия фция

ADOLF добавил:
+ атан же сам посебе возращает угол в радианах, что бы получить грудусы надо умножить на 57.2957 (ну или оставить, к примеру кос и син работают с радианами)

ADOLF добавил:
а ну есои тебе надо сравнить в файсингом юнита - то да, оно возращает в градусах

т.е. тебе нужно отнять от взгляда юнита в градусах угол между точками и проверить полученное число, если оно лежит в отрезке -Х, Х (ну к примеру Х=15) то тогда он смотрит в ту сторону
Старый 21.10.2008, 19:57
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
ADOLF, ему надо узнать повёрнут ли юнит к той точке, значит нужно возращать boolean!
Код:
function AngleBetweenPoints takes location locA, location locB returns boolean
    return bj_RADTODEG * Atan2(GetLocationY(locB) - GetLocationY(locA), GetLocationX(locB) - GetLocationX(locA))
endfunction
Старый 21.10.2008, 19:59
agentex

offline
Опыт: 34,834
Активность:
Цитата:
ADOLF, ему надо узнать повёрнут ли юнит к той точке, значит нужно возращать boolean!

да это фигня сам разберусь мне главное принцип понять нужно

agentex добавил:
Цитата:
returns boolean
return bj_RADTODEG * Atan2(GetLocationY(locB) - GetLocationY(locA), GetLocationX(locB) - GetLocationX(locA))

уххахаха отжег) 5+

Отредактировано agentex, 21.10.2008 в 20:50.
Старый 21.10.2008, 20:25
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
King Ksel, попробуй скормить свою функцию варкрафту - первый попавшийся на пути препроцессор обматерит тебя по полной )

остальное доходчиво объяснил Адольф
Старый 21.10.2008, 20:59
agentex

offline
Опыт: 34,834
Активность:
все, разобрался! всем спасибо можно прикрывать!
Старый 21.10.2008, 21:03
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 23:20.