Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Как реализовать выстрел из гарпуна(хука)?

#c_sharp #unity3d


Я хочу реализовать выстрел из гарпуна(хука), как в игре Dota 2.
Чтобы когда Pudge бросал крюк:
1. За крюком следовала линия (тросс)
2. При возвращении хука - тросс сокращался и потом вовсе исчезал.
Вот видео - https://youtu.be/xlcw7VGaqiY

1 пункт примерно понимаю как реализовать, а вот со вторым возникают большие трудности.
Есть какие-нибудь идеи как можно такое реализовать? Желательно бы со ссылочками
    


Ответы

Ответ 1



Есть такая штука как Joint. Всегда актуальная документация по джоинтам есть в документации к юнити: https://docs.unity3d.com/Manual/Joints.html . Если это 2д проэкт, то там есть отдельно 2dJoint-ы: https://docs.unity3d.com/Manual/Joints2D.html Через него, например, реализуется таскание при помощи веревок/цепей/проводов. У документации юнити видеотуториал по использованию джоинтов. А вот здесь можно найти неофициальный туториал, только для создания физики таскания на веревке при помощи джоинтов. Формально, твоя задача сделать несколько секций цилиндров соединенных между собой при помощи джоинтов и у тебя будет веревка/цепь/провод. Чем больше количество секций - тем реалистичнее выйдет. Думаю, что если заскейлить размер веревки по нужной оси(Relative только!) то получится именно тот эфект, который нужно и на основе физики будет притягиватся персонаж. Думаю что это решение подойдет если нужна физическая составляющая. Так же есть решение через https://github.com/NoxWings/Cable-Component Здесь физика веревки не будет учитыватся. Немного более широкое описание: Unity Cable-Component В даном случае т.к. веревка нефизическая, нужно будет при прикреплении к персонажу/предмету подсовывать его... Можно попробовать двигать через MoveToward(), но я не уверен на сколько это красивое решение... UPD: Есть еще третий вариант. Думаю, по быстродействию он будет самым оптимальным: Нарисовать между центрами двух обьектов сплайн, а потом вдоль сплайна рисовать звенья веревки/цепи. Как это сделать можно почитать, например, вот здесь: https://catlikecoding.com/unity/tutorials/curves-and-splines/ Сплайн должен быть двухточечным. Т.е. указыватся начало и конец -- без промежуточных точек. Обновлять позиции точек будет достаточно просто... Думаю, на том видео которое было примером был взят именно этот путь реализации.

Ответ 2



К сожалению Joint'ы мне не помогли, но помог Line Renderer. Я просто нацепил на каждый объект хука line renderer и в качестве стартовой позиции линии я указывал игрока, а в качестве конечной - transform.position самого хука.

Комментариев нет:

Отправить комментарий