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

133
07 декабря 2019, 08:30

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

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

Answer 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/

Сплайн должен быть двухточечным. Т.е. указыватся начало и конец -- без промежуточных точек. Обновлять позиции точек будет достаточно просто...

Думаю, на том видео которое было примером был взят именно этот путь реализации.

Answer 2

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

READ ALSO
C#. Слишком длинный строковый параметр

C#. Слишком длинный строковый параметр

Заменяю текст в документе wordПока текст короткий передаю в word, всё нормально работает

121
Собственный атрибут

Собственный атрибут

Подскажите как это реализуется, ни разу такого не делалМне надо, перед методом проверять, имеет ли роль пользователя, разрешения на использования...

115
Почему возникает ошибка при загрузке DLL-файла?

Почему возникает ошибка при загрузке DLL-файла?

При попытке загрузить файл с хоста таким образом

108
Ошибка UnityEditor.BuildPlayerWindow+BuildMethodException

Ошибка UnityEditor.BuildPlayerWindow+BuildMethodException

Знаю эта тема довольно заезженная но, ошибка появилась с ничегоЯ ничего не обновлял, не удалял а просто делал свою прогу

104