47 lines
2.3 KiB
C#
47 lines
2.3 KiB
C#
#if UNITY_EDITOR
|
|
using UnityEngine;
|
|
|
|
namespace GSpawn
|
|
{
|
|
public static class ObjectPositionCalculator
|
|
{
|
|
private static ObjectBounds.QueryConfig _boundsQConfig = new ObjectBounds.QueryConfig();
|
|
|
|
static ObjectPositionCalculator()
|
|
{
|
|
_boundsQConfig.volumelessSize = Vector3.zero;
|
|
_boundsQConfig.objectTypes = GameObjectType.All;
|
|
_boundsQConfig.includeInactive = false;
|
|
_boundsQConfig.includeInvisible = false;
|
|
}
|
|
|
|
public static Vector3 calcRootPosition(GameObject root, Vector3 desiredOOBBCenter, Vector3 desiredWorldScale, Quaternion desiredWorldRotation)
|
|
{
|
|
OBB obb = ObjectBounds.calcHierarchyWorldOBB(root, _boundsQConfig);
|
|
Transform rootTransform = root.transform;
|
|
Matrix4x4 rootTransformMatrix = Matrix4x4.TRS(Vector3.zero, rootTransform.rotation, rootTransform.lossyScale);
|
|
Matrix4x4 desiredTransformMatrix = Matrix4x4.TRS(Vector3.zero, desiredWorldRotation, desiredWorldScale);
|
|
Matrix4x4 inverseTransformMatrix = desiredTransformMatrix * rootTransformMatrix.inverse;
|
|
|
|
Vector3 relationshipVector = rootTransform.position - obb.center;
|
|
relationshipVector = inverseTransformMatrix.MultiplyVector(relationshipVector);
|
|
|
|
return desiredOOBBCenter + relationshipVector;
|
|
}
|
|
|
|
public static Vector3 calcRootPosition(GameObject root, OBB hierarchyOBB, Vector3 desiredOOBBCenter, Vector3 desiredWorldScale, Quaternion desiredWorldRotation)
|
|
{
|
|
Transform rootTransform = root.transform;
|
|
|
|
Matrix4x4 rootTransformMatrix = Matrix4x4.TRS(Vector3.zero, rootTransform.rotation, rootTransform.lossyScale);
|
|
Matrix4x4 desiredTransformMatrix = Matrix4x4.TRS(Vector3.zero, desiredWorldRotation, desiredWorldScale);
|
|
Matrix4x4 inverseTransformMatrix = desiredTransformMatrix * rootTransformMatrix.inverse;
|
|
|
|
Vector3 relationshipVector = rootTransform.position - hierarchyOBB.center;
|
|
relationshipVector = inverseTransformMatrix.MultiplyVector(relationshipVector);
|
|
|
|
return desiredOOBBCenter + relationshipVector;
|
|
}
|
|
}
|
|
}
|
|
#endif |