Все та-же проблема с аттачами и их углами

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
нужно сделать плавный поворот башни, наведение на цель
делаешь квар с угловой скоростью поворота башни (для удобства настройки), потом делаешь повторяющийся таймер (кулдаун меньше секунды) и делишь необходимый угол поворота на угловую скорость умноженную на кулдаун таймера и каждую итерацию таймера смещаешь на полученный угол.
Лучшего способа сделать более-менее плавную анимацию поворота я не знаю
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Всё, полностью готово.
Все повороты пулемета сделал на одном движке, на башне. С трассерами есть проблема, не могу прицепить к аттачу, даже странно. Но это уже не есть проблема.
Плавные повороты у меня уже давно перестали быть проблемой, еще с плагином RCDroneHelli.

Запись не ахти получилась. С лагами, работал паралельно с графикой.
--- Добавлено позже ---
потом делаешь повторяющийся таймер (кулдаун меньше секунды)

Что бы не создавать лишних таймеров, я делаю такие значения в OnPlayerRunCmd, или в OnGameFrame. Это уже готовые, постоянно работающие, встроенные "таймеры".
Переменная глобального уровня, если переменная активированна и если > 0 - уменьшаю до мах разрешенного значения, если не активированна - плавно уменьшаю до нуля. Это что бы не было перескоков скорости при каких либо изменениях в скорости, просто обращаюсь к этой переменной. Работает распрекрасно.
--- Добавлено позже ---
Версия плагина с нанесением ущерба противникам. То-есть это уже практически самостоятельный, хоть и крайне тупой, но это целиком и полностью мой NPC.
Над его "разумом" нужно работать. Простор для фантазии здесь просто безграничен!


--- Добавлено позже ---
делаешь квар с угловой скоростью поворота башни (для удобства настройки), потом делаешь повторяющийся таймер (кулдаун меньше секунды) и делишь необходимый угол поворота на угловую скорость умноженную на кулдаун таймера и каждую итерацию таймера смещаешь на полученный угол.

Только обратил внимание, у тебя же это какая-то формула. А как ты определяешь "необходимый угол поворота"?
Тоже интересная проблема. Остановка на конечной точке, или остановка поворота при достижении заданного угла. Если с векторами я разобрался практически полностью, то вот с углами и всем что с ними связанно (синусы, косинусы) я пока не разобрался.
Я делаю просто сравнением. Например поворот башни у меня пойдет до тех пор, пока указанный угол положения башни не достигнет начального или заданного угла, все эначения округленные.
Всё это работает ненадежно, так как при большой задержке таймера (например 0.2 сек), и большой скорости, значение может просто "проскочить" мимо заданного, и тогда круг по новой(или движение дальше). Я, честно сказать, пока особенно не вдавался в это, но сколько в инете не смотрел, чего либо дельного пока не увидел, только формулы. А формулы, для использования, нужно понять.
Интересно у кого какие есть мысли по этому поводу. Возможно это повод для новой темы.
 
Последнее редактирование:

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
С трассерами есть проблема, не могу прицепить к аттачу, даже странно.

Пока есть время расскажу как решается, возможно кому-нибудь пригодится.
Вот что я понял:
Прицепить энтитьки типа env_gunfire, правильно, т.е. на заданный аттач, можно только на тот аттач, который является не более чем вторым от основной кости.
Что бы понятнее, к основной кости модели можно прицепить аттач(массу аттачей), к этому аттачу прицепить другой аттач, к нему так же следующий. Все эти аттачи будут жестко связанны с основной костью модели.
атачи.jpg
Т.е. если
env_gunfire цеплять на аттач №2 (или аттач №1) - прицепится так как нужно, центр будет от аттача.
Если цеплять на аттачи №3 или выше, то цепляться будет неправильно, центр будет идти от центра (Piviot) цепляемой модели(а не аттача), к которой относится аттач (в этом примере это атач №3), соответственно эта ошибка пойдет дальше, по другим аттачам.


--- Добавлено позже ---
Плавные повороты у меня уже давно перестали быть проблемой, еще с плагином RCDroneHelli.
Я ошибся здесь. Вернее, сама плавность поворота есть, но нет определенной точки останова этого поворота.
На Дроне, с управлением с клавиатуры(т.е. игроком), эта точка останова определенна самим игроком, а вот в случае с NPC эта точка должна быть как то заданна.
Я получаю необходимый угол поворота таким образом:
1. есть угол текущего положения Дрона(не вектор!).
2. есть угол направления на цель (угол получен из вектора направления).
3. вычитаю из нужного угла направления (например yaw) угол текущего положения Дрона(так-же yaw), получаю некую дельту. Это и есть тот угол на который нужно повернуть.
Поворачиваю 2 вариантами, один равномерно, таким макаром
C-подобный:
angles[1]+=((delta < 0.0)?-360.0:360.0)*0.1;
это уже с определением направления поворота.
второй, с быстрым стартом и плавным окончанием поворота, таким макаром
C-подобный:
yaw2[ent] -= (yaw2[ent]/180)*fSpeedRotationTurret;
это уменьшение глобального значения.
Если этот угол передать в глобал, то после выстрела можно плавно возвращать в начальную точку, за счет уменьшения значения этого угла.

У меня проблема сейчас именно с плавным наведением на цель. Не могу понять, как сделать уверенный останов на заданной точке. На других сайтах у кого спрашивал, советуют использовать библиотеки от си++. Но это не тот вариант.

делишь необходимый угол поворота на угловую скорость умноженную на кулдаун таймера и каждую итерацию таймера смещаешь на полученный угол.
Пример кода бы посмотреть, если можно.
Если я правильно понял должно быть так:
1. Угол поворота delta.
2. Скорость поворота fSpeedRotationTurret.
3. Таймер 0.1

C-подобный:
angles[1] += delta/(fSpeedRotationTurret*0.1)
Без учета направления поворота.
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@tonline_kms65_1, вроде формула должна именно такой быть, как ты написал

только если таймер всегда равен одной десятой секунды, то можно сделать так: 10*delta/fSpeedRotationTurret
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Все, готово! Разобрался.
Я не с того аттача получал угол (delta), я делал непосредственно от тела(гусениц), а нужно было делать от башни. Сейчас работает отлично.
А то я уже было духом упал. Не получается и всё тут, хоть тресни. А оказывается всё было просто.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@tonline_kms65_1, не хватает только отображения оставшейся жизни у техники
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
не хватает только отображения оставшейся жизни у техники

Это пожалуй самое простое. Одно из самого простого. Но мысль интересная, обязятельно сделаю.

А не хватает еще много:
1. озвучка поворота башни.
2. не нравится мне движение по вейпоинтам, такое чувство что что-то иногда мешает, наподобие ENT пыли в "темках", и ей подобной ерунды на картах, которые вроде не видно, но они есть.
3. на дронов-NPC, с ракетными установками так-же нужен плавный поворот(наведение на цель), нужно доделать анимации выстрелов(пуска ракет) (У меня сейчас 3 вида Дронов).
4. начинал делать обход препятствий, сделал остановку движения, если на пути движения есть игрок из своей команды, но опять же есть НО.
--- Добавлено позже ---
Кстати! Еще одна непонятная проблема.
Движение гусениц Дрона я делаю анимированной текстурой, просто переключаю скины.
Я анимировал текстуру гусениц - движение вперед, движение назад, и idle(просто текстура гусениц, без анимации).
Т.е при вклоючении скина останова - движение гусениц останавливается, Скин вперед - анимированная текстура, движение вперед. Эти скины работают без проблем.
Но скин анимированная текстура - движение гусениц назад не работает и всё тут. Или где-то мой косяк, или это какое-то ограничение движка.
Пробовал в хаммере делать - все скины работают отлично.
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
1. озвучка поворота башни.
можно взять что-то из стандартных звуков, обрезать так, чтобы длительность звука была примерно равна длительности цикла таймера при поворотах (0,1 сек) в каждой итерации таймера его воспроизводить
или сделать "бесшовный" звук большей длительности, который будет повторяться пока будет поворачиваться башня и у обновления звука будет свой таймер, при остановке башни должен таймер должен останавливаться и звук тоже (воспроизведением тишины, например)
только нужно делать так чтобы этот звук не перебивал собой другие звуки и другие звуки не перебивали его
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
@Grey83,
Звук у меня есть давно.
Я уже как-то поднимал эту тему, насчет перехвата окончания проигрывания звука. Если, касаемо анимаци, можно поймать окончание её проигрывания, то насчет перехвата окончания проигрывания звука я пока ответа так и не нашел. В принципе, особо и не искал, мне это не интересно.
Я делал просто, узнавал время звучания аудиофайла(в м/с) , проигрывал этот звук таймером с длительностью самого аудиофайла. Но это головняк, хоть и не серьёзный, но всеравно неприятный. Возможно есть встроенная ф-я для определения конца проигрывания аудиофайла.
 
Последнее редактирование:

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Всё! Этот вопрос, для меня, решен полностью! В принципе, можно тему закрывать.
Плавное наведение, плавный возврат, с озвучкой. Даже с определением длительности проигрывания звуков.
Отлично работает, хоть в движении, хоть статично. Даже мне нравится.
Немного видео войны моих Дронов:

Дополнительно сделал плавный поворот ракет. И по мелочам, визуальные эффекты.
 
Последнее редактирование:
Сверху Снизу