Повторить вращение объекта по физике

Рейтинг: 0Ответов: 1Опубликовано: 02.02.2023

На сцене есть два куба (2Д), куб1 физический, а куб2 нет. куб1 должен вращаться по физике, повторяя вращение куба2. Например если у куба2 вращение 45 градусов, то и куб1 должен повернутся на 45 градусов, но плавно и по физике. Пожалуйста напишите как можно это реализовать кодом, и чтобы была возможность в инспекторе менять скорость вращения куба1.

Вот что я пробовал (rig это Rigidbody2D куба1, а obj это куб2). 1 способ:

rig.angularVelocity += (obj.transform.eulerAngles.z - transform.eulerAngles.z) * stabSpeed;

2 способ:

if (transform.eulerAngles.z < obj.transform.eulerAngles.z) {
    rig.angularVelocity += stabSpeed;
} else if (transform.eulerAngles.z > obj.transform.eulerAngles.z) {
    rig.angularVelocity -= stabSpeed;
}

Но оно не работает (можете даже не проверять, оно по логике и не должно работать, так нельзя сравнивать углы)

Ответы

▲ 1Принят
float selfAngle = transform.eulerAngles.z;
float targetAngle = obj.transform.eulerAngles.z;
float deltaAngle = Mathf.DeltaAngle(selfAngle, targetAngle);

deltaAngle это разница между поворотами двух объектов, то есть насколько первому нужно повернуться. Если скорость постоянная, от дельты нужен просто знак speed*Mathf.Sign(deltaAngle). Вот с этой переменной и работай. На тему инспектора, это просто поле-множитель к скорости.