Допустим, есть преобразование под названием P, его дочерний элемент под названием C и случайная точка в мире под названием K. Я хочу повернуть P так, чтобы положение C стало равным или близким к K. Как я могу это сделать? Я искал Quaternions, LookAt, Inverse и т. д., но не нашел.





Сначала узнайте направление от родителя к дочернему объекту и от родителя к другому объекту.
Получив эти два вектора направления, найдите угол со знаком между ними.
Этот угол — это величина, на которую вам нужно повернуть родительский элемент.
var childDirection = (child.position - transform.position);
var otherDirection = (other.position - transform.position);
var angle = Vector3.SignedAngle(childDirection, otherDirection, Vector3.up);
transform.Rotate(new Vector3(0, angle, 0));
Вышеупомянутое предполагает, что вы вращаетесь вокруг оси вверх. Вы можете изменить ось, заменив параметр оси в функции SignedAngle и изменив компонент вектора вращения.
Предполагая, что у вас есть свойства, назначенные для:
Transform parentP; // Parent transform
Transform childC; // Child transform
Transform randomPointK; // Random point transform
Вы можете вызвать следующую функцию RotateToClosest, чтобы повернуть родительский элемент так, чтобы дочерний элемент был ближе всего к случайной точке. Вращение не зависит от какой-либо оси и может быть применено немедленно, поскольку мы используем кватернионы:
void RotateParentToClosest()
{
// Calculate vectors from parent to child and from parent to random point
Vector3 toChild = childC.position - parentP.position;
Vector3 toRandomPoint = randomPointK.position - parentP.position;
// Calculate the rotation to align toChild with toRandomPoint vectors
Quaternion desiredRotation = Quaternion.FromToRotation(toChild, toRandomPoint);
// Apply the rotation to the parent
parentP.rotation = desiredRotation * parentP.rotation;
}
Спасибо за ответ! Это не полностью решило мою проблему, но это правильный ответ на данный вопрос.