private void UpdateBounds() { if (cachedTargetCollider != null) { // Store current rotation then zero out the rotation so that the bounds // are computed when the object is in its 'axis aligned orientation'. Quaternion currentRotation = targetObject.transform.rotation; targetObject.transform.rotation = Quaternion.identity; UnityPhysics.SyncTransforms(); // Update collider bounds Vector3 boundsExtents = cachedTargetCollider.bounds.extents; // After bounds are computed, restore rotation... targetObject.transform.rotation = currentRotation; UnityPhysics.SyncTransforms(); if (boundsExtents != Vector3.zero) { if (flattenAxis == FlattenModeType.FlattenAuto) { float min = Mathf.Min(boundsExtents.x, Mathf.Min(boundsExtents.y, boundsExtents.z)); flattenAxis = min.Equals(boundsExtents.x) ? FlattenModeType.FlattenX : (min.Equals(boundsExtents.y) ? FlattenModeType.FlattenY : FlattenModeType.FlattenZ); } boundsExtents.x = flattenAxis == FlattenModeType.FlattenX ? 0.0f : boundsExtents.x; boundsExtents.y = flattenAxis == FlattenModeType.FlattenY ? 0.0f : boundsExtents.y; boundsExtents.z = flattenAxis == FlattenModeType.FlattenZ ? 0.0f : boundsExtents.z; currentBoundsExtents = boundsExtents; GetCornerPositionsFromBounds(new Bounds(Vector3.zero, boundsExtents * 2.0f), ref boundsCorners); CalculateEdgeCenters(); } } }
private void UpdateBounds() { if (TargetBounds != null) { // Store current rotation then zero out the rotation so that the bounds // are computed when the object is in its 'axis aligned orientation'. Quaternion currentRotation = Target.transform.rotation; Target.transform.rotation = Quaternion.identity; UnityPhysics.SyncTransforms(); // Update collider bounds Vector3 boundsExtents = TargetBounds.bounds.extents; // After bounds are computed, restore rotation... Target.transform.rotation = currentRotation; UnityPhysics.SyncTransforms(); if (boundsExtents != Vector3.zero) { if (flattenAxis == FlattenModeType.FlattenAuto) { float min = Mathf.Min(boundsExtents.x, Mathf.Min(boundsExtents.y, boundsExtents.z)); flattenAxis = (min == boundsExtents.x) ? FlattenModeType.FlattenX : ((min == boundsExtents.y) ? FlattenModeType.FlattenY : FlattenModeType.FlattenZ); } boundsExtents.x = (flattenAxis == FlattenModeType.FlattenX) ? 0.0f : boundsExtents.x; boundsExtents.y = (flattenAxis == FlattenModeType.FlattenY) ? 0.0f : boundsExtents.y; boundsExtents.z = (flattenAxis == FlattenModeType.FlattenZ) ? 0.0f : boundsExtents.z; currentBoundsExtents = boundsExtents; GetCornerPositionsFromBounds(new Bounds(Vector3.zero, boundsExtents * 2.0f), ref boundsCorners); boundsUpdated.Invoke(); } } }
private Vector3 CalculateBoundsExtents() { // Store current rotation then zero out the rotation so that the bounds // are computed when the object is in its 'axis aligned orientation'. Quaternion currentRotation = Target.transform.rotation; Target.transform.rotation = Quaternion.identity; UnityPhysics.SyncTransforms(); // Update collider bounds Vector3 boundsExtents = TargetBounds.bounds.extents; // After bounds are computed, restore rotation... Target.transform.rotation = currentRotation; UnityPhysics.SyncTransforms(); // apply flattening return(VisualUtils.FlattenBounds(boundsExtents, flattenAxis)); }
private void SetBoundsControlCollider() { // Make sure that the bounds of all child objects are up to date before we compute bounds UnityPhysics.SyncTransforms(); if (boundsOverride != null) { TargetBounds = boundsOverride; TargetBounds.transform.hasChanged = true; } else { Bounds bounds = GetTargetBounds(); TargetBounds = Target.AddComponent <BoxCollider>(); TargetBounds.center = bounds.center; TargetBounds.size = bounds.size; } CalculateBoxPadding(); TargetBounds.EnsureComponent <NearInteractionGrabbable>(); }