12345678910111213141516171819202122232425262728293031 |
- #if UNITY_EDITOR
- using UnityEngine;
- namespace O3DWB
- {
- public static class ObjectPositionCalculator
- {
- #region Public Static Functions
- public static Vector3 CalculateObjectHierarchyPosition(Prefab sourcePrefab, Vector3 desiredOrientedBoxCenter, Vector3 desiredWorldScale, Quaternion desiredWorldRotation)
- {
- return CalculateObjectHierarchyPosition(sourcePrefab.UnityPrefab, desiredOrientedBoxCenter, desiredWorldScale, desiredWorldRotation);
- }
- public static Vector3 CalculateObjectHierarchyPosition(GameObject source, Vector3 desiredOrientedBoxCenter, Vector3 desiredWorldScale, Quaternion desiredWorldRotation)
- {
- OrientedBox prefabWorldOrientedBox = source.GetHierarchyWorldOrientedBox();
- Transform rootTransform = source.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 - prefabWorldOrientedBox.Center;
- relationshipVector = inverseTransformMatrix.MultiplyVector(relationshipVector);
- return desiredOrientedBoxCenter + relationshipVector;
- }
- #endregion
- }
- }
- #endif
|