private void FollowBoundingBox(bool smooth) { if (boundingBox == null) { if (DisplayType == AppBarDisplayTypeEnum.Manipulation) { // Hide our buttons baseRenderer.SetActive(false); } else { baseRenderer.SetActive(true); } return; } // Show our buttons baseRenderer.SetActive(true); //calculate best follow position for AppBar Vector3 finalPosition = Vector3.zero; Vector3 headPosition = Camera.main.transform.position; LayerMask ignoreLayers = new LayerMask(); List <Vector3> boundsPoints = new List <Vector3>(); if (boundingBox != null) { helper.UpdateNonAABoundingBoxCornerPositions(boundingBox.Target, boundsPoints, ignoreLayers); int followingFaceIndex = helper.GetIndexOfForwardFace(headPosition); Vector3 faceNormal = helper.GetFaceNormal(followingFaceIndex); //finally we have new position if (positionAppBarOnTop) { finalPosition = helper.GetFaceTopCentroid(followingFaceIndex) + (faceNormal * HoverOffsetZ); } else { finalPosition = helper.GetFaceBottomCentroid(followingFaceIndex) + (faceNormal * HoverOffsetZ); } } // Follow our bounding box transform.position = smooth ? Vector3.Lerp(transform.position, finalPosition, 0.5f) : finalPosition; // Rotate on the y axis Vector3 eulerAngles = Quaternion.LookRotation((boundingBox.transform.position - finalPosition).normalized, Vector3.up).eulerAngles; eulerAngles.x = 0f; eulerAngles.z = 0f; transform.eulerAngles = eulerAngles; }