コード例 #1
0
        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;
        }