Единство вращать объект в зависимости от угла других объектов - PullRequest
3 голосов
/ 13 марта 2019

У меня есть два игровых объекта.Основной вопрос: «Когда я вращаю круг 1, я хочу вращать круг 2 точно так же, как манипулирует множителем x»

Как синхронизировать вращение вокруг каждой их локальной оси круга 2 с интерактивнымвращение круга один и масштабировать это вращение с коэффициентом х?Установка равного transform.right не работает, есть еще много степеней свободы.(Локальная ось, потому что я хочу, чтобы один или оба игровых объекта также были наклонены, но не связаны друг с другом.)

Попытка математики с вращательными матрицами на самом деле не сработала, основываясь на том факте, что они оцениваются в каждом кадре и, таким образом,вращение Объекта 2 на вечность.

Большое спасибо!

enter image description here

1 Ответ

4 голосов
/ 13 марта 2019

Предполагая, что вы вращаете только вокруг одной оси (как показано на изображениях), вы можете получить разницу вращения в градусах круга2, используя, например, Quaternion.Angle каждый кадр

private Quaternion lastCircle2Rot;

//...

float rotDelta = Quaternion.Angle(lastCircle2Rot, circle2.transform.rotation);
lastCircle2Rot = circle2.transform.rotation;

чем повернуть круг1 соответственно, используя, например, Transform.RotateAround

public float multiplier;

// e.g. rotate around local x = right
Vector3 YourAxis = circle1.transform.right;
circle1.transform.RotateAround(Vector3.zero, YourAxis, rotDelta * multiplier);

при использовании, например, правильный или другой «чистый» вектор, который вы также можете просто использовать

circle1.transform.Rotate(Vector3.right, rotDelta * multiplier);

как это сделано в локальном пространстве по умолчанию.

...