Странное поведение при повороте 2D GameObject с шарнирными детьми в Unity

Вопрос: Уже более двух дней я борюсь с этой, казалось бы, невозможной проблемой: у меня есть составной GameObject (один родитель, 10 детей), каждый из которых шарнирно привязан, по крайней мере, к другому с ограничениями угла и двигателями с управляемым двигателем. Движется отлично, как я желаю. Теперь я хочу, чтобы его можно было перевернуть. Через некоторое

Вопрос:

Уже более двух дней я борюсь с этой, казалось бы, невозможной проблемой: у меня есть составной GameObject (один родитель, 10 детей), каждый из которых шарнирно привязан, по крайней мере, к другому с ограничениями угла и двигателями с управляемым двигателем. Движется отлично, как я желаю. Теперь я хочу, чтобы его можно было перевернуть. Через некоторое время и во многих испытаниях вращение кажется лучшим способом для сохранения углов (инвертирование localSpace не учитывает их):

Vector3 rotPoint = new Vector3 (ParentGameObject.transform.position.x, myY, myZ); ParentGameObject.transform.rotateAround (rotPoint, Vector3.up, 180.0f);

НО, если родитель вращается, как задано (180 градусов вокруг его оси Y), каждый ребенок переворачивается, но не вокруг одной и той же оси, а не вокруг своего собственного центра вращения. Это дает нелепые результаты, поскольку шарниры пытаются вернуться в нужную позицию. Как я могу это исправить? Большое спасибо заблаговременно…

Лучший ответ:

В конце концов я понял проблему. У моей проблемы не было никакого важного решения.

Мы можем вращать преобразование вокруг оси Y даже в 2D, но НЕ твердое тело 2D, которое в одном и том же объекте неизбежно вызовет серьезные проблемы.

Возможно, это одна из оставшихся несогласованностей с реализацией 2D Unity5. Мне пришлось перевернуть с помощью localScale-инверсии и программно обновленных позиций и поворотов.

Ответ №1

Это звучит как ребенок GameObjects вращаются вокруг своих собственных стержней, а не родителей. На данный момент у меня нет Unity, чтобы проверить это, но если вы добавите пустой GameObject в качестве дочернего элемента вашего родителя (и с той же точкой опоры), тогда сделайте все ваши другие GameObjects дочерними, из которых он должен работать.,

Ответ №2

Вы не должны перемещать или поворачивать жесткое тело, если вам это не нужно. Это испортит основные вычисления физики, и физики не будут этому довольны. Вместо этого у вас есть другие способы взаимодействия с ними

  • Применить силу, крутящий момент
  • Применить ускорение, угловое ускорение
  • Скорость изменения, угловая скорость

Если вам нужно перемещать/вращать объект, вы также должны обновлять позиции, вращения, скорости, угловые скорости всех ваших шарнирных объектов. Это было бы нелегко. Дайте несколько подробностей, если вы не можете решить.

Оцените статью
Добавить комментарий