Estou tentando determinar as etapas de transformação (posição, escala, rotação) precisavam ser aplicadas a um objeto para que dois pontos, posicionados localmente nesse objeto, alinhem -se com duas posições espaciais mundiais.
A configuração atualmente é:
- E é um pré -fabric com duas crianças transformadas (a, b)
- Transformações C e D também estão dentro de um pré -fabricação (f)
- Temos uma posição mundial, escala e rotação que F instanciará com
- Antes de qualquer instanciação, calcule a transformação que precisa ocorrer para E para acabar na posição correta.

A solução que tenho no momento está próxima, mas a rotação nunca parece se alinhar perfeitamente, afetando o posicionamento.
public static (Vector3, Quaternion, Vector3) GetChildPosLeg(
Rework topReference, // A
Rework bottomReference, // B
Rework topTarget, // C
Rework bottomTarget, // D
Vector3 scale // Scale of root instantiated object
)
{
// World topTarget
Vector3 topTargetPos = (Vector3.Scale(topTarget.place, scale));
Vector3 bottomTargetPos = (Vector3.Scale(bottomTarget.place, scale));
// Scale
float refDist = Vector3.Distance(topReference.place, bottomReference.place);
float targetDist = Vector3.Distance(topTargetPos, bottomTargetPos);
float scaleRatio = targetDist / refDist;
Vector3 finalScale = new Vector3(0.5f, 1f, 0.5f) * scaleRatio;
// Rotation
Vector3 targetDir = topTarget.place - bottomTarget.place;
Vector3 refDir = bottomReference.localPosition - topReference.localPosition;
Quaternion objectRotation = Quaternion.FromToRotation(refDir, targetDir);
// Place
Vector3 childNodePos = Vector3.Scale(topReference.localPosition, finalScale);
childNodePos = objectRotation * childNodePos;
Vector3 finalPosition = topTargetPos + childNodePos;
return (finalPosition, objectRotation, finalScale);
}