У меня есть объект пальца.Это всего три куба, представляющих части пальцев.2-й куб - это дитя 1-го.А 3-й куб является потомком 2-го.
Это иерархия: Cube1 -> Cube2 -> Cube3
Моя цель - применить угол поворота к первому кубу и позволить другим кубам сделатьто же самое локально.
Пример: применить поворот на 30 градусов Z к первому кубу, поворот на 30 градусов Z ко 2-му кубу, а также к 3-му.Это сделает палец, который выглядит следующим образом:
(Простите, если он не похож на палец) В каждом кадре 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))
каждый кадр тоже.