Unity — Как привязать объект к объекту, если он сталкивается с дочерним объектом
У меня есть телескопический гаджет с шипами в игре, над которой я работаю. Шип должен быть приспособлением для руки игрока, которое позволит ему прилипать к стене, как только острие шипа (самый глубокий дочерний объект) чего-то касается. По сути, я хочу, чтобы он «вонзился» в стену и удерживал игрока на месте.
Ближе всего к этому я подошел, установив для параметра «Режим контактных пар» значение «Включить кинематические кинематические пары», а затем добавив в наконечник кинематическое жесткое тело и фиксированное соединение. Вот код самого шипа:
Вот код столкновения острия шипа:
А вот иерархия активов игрока:
В настоящее время, когда шип сталкивается с поверхностью, я вижу в редакторе, что подключенное тело зарегистрировано.
Несмотря на это, игрок отскакивает и может свободно двигаться, как будто сустава не существует. Может ли кто-нибудь помочь мне узнать, почему плеер не крепится к стене?
TL; DR: Как я могу получить дочерний объект с RigidBody для подключения к другому объекту через FixedJoint?
1 ответ
Сначала создайте два компонента FixedJoint на кончике и назначьте их полям в скрипте. Назначьте жесткое тело игрока полю в скрипте. Назначьте твердое тело и коллайдер наконечника полю в скрипте.
Во-вторых, когда происходит столкновение, выключите isKinematic, чтобы наконечник воздействовал на суставы (например, чтобы он следовал за закрепленными врагами, если они двигаются).
В-третьих, когда вы хотите завершить привязку, вы должны просто иметь возможность снова установить isKinematic в значение true, присвоить обоим его соединенным соединенным телам значение null и, при необходимости, отключить его коллайдер, чтобы избежать
Вы можете сделать то же самое с наконечником, который никогда не будет кинематическим, если хотите, вам просто нужно будет Destroy суставы вместо установки connectedBody на ноль, а также создать суставы только при столкновении это может выглядеть следующим образом: