Как применить ротацию к родительскому ребенку с помощью Rigidbody? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть объект пальца.Это всего три куба, представляющих части пальцев.2-й куб - это дитя 1-го.А 3-й куб является потомком 2-го.

Это иерархия: Cube1 -> Cube2 -> Cube3

Моя цель - применить угол поворота к первому кубу и позволить другим кубам сделатьто же самое локально.

Пример: применить поворот на 30 градусов Z к первому кубу, поворот на 30 градусов Z ко 2-му кубу, а также к 3-му.Это сделает палец, который выглядит следующим образом: enter image description here

(Простите, если он не похож на палец) В каждом кадре Update () я буду менять угол(это всего лишь одно число), и он будет вращать каждый куб для меня.

Мой вопрос:

Как заставить все эти кубы правильно сталкиваться с другими объектами?

Я попытался поместить Rigidbody на всех из них и установить isKinematic = false, потому что я хочу сам преобразовать их.Но я все еще не могу использовать transform.rotation для обновления своего вращения, потому что оно очень легко пропустит столкновение с мячом (особенно кончик пальца, потому что он движется быстрее, чем другие части).Непрерывное обнаружение не помогает.

Поэтому я попытался использовать rigidbody.MoveRotation() и rigidbody.MovePosition() вместо этого, что является болью, потому что им нужны абсолютные значения.Они сработали, но анимация настолько нервная, когда я быстро меняю угол.Я предполагаю, что анимация нервная, потому что там много жестких тел, или потому что физический движок не может правильно интерполировать положение каждого блока, когда я использую MoveRotation() и MovePosition().

Мне нужно использовать MovePosition() также потому, что когда я использую только child.MoveRotation(transform.parent.rotation * originalChildLocalRotation * Quaternion.Euler(0, 0, angle)), позиция не перемещается относительно родителя.Поэтому мне нужно вычислять child.MovePosition(parent.TransformPoint(originalLocalPositionOfTheChild)) каждый кадр тоже.

...