/// <summary>
        /// Displays the boundary as an array of spheres where spheres in the
        /// bounds are a different color.
        /// </summary>
        private void AddMarkers()
        {
            // Get the rectangular bounds.

            if (!MixedRealityToolkit.BoundarySystem.TryGetRectangularBoundsParams(out Vector2 centerRect, out float angleRect, out float widthRect, out float heightRect))
            {
                // If we have no boundary manager or rectangular bounds we will show no indicators
                return;
            }

            MixedRealityBoundaryVisualizationProfile visualizationProfile = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile;

            if (visualizationProfile == null)
            {
                // We do not have a visualization profile configured, therefore do not render the indicators.
                return;
            }

            const int   indicatorCount    = 20;
            const float indicatorDistance = 0.2f;
            const float indicatorScale    = 0.1f;
            const float dimension         = indicatorCount * indicatorDistance;

            Vector3 center = new Vector3(centerRect.x, 0f, centerRect.y);
            Vector3 corner = center - (new Vector3(dimension, 0.0f, dimension) * 0.5f);

            corner.y += 0.05f;
            for (int xIndex = 0; xIndex < indicatorCount; ++xIndex)
            {
                for (int yIndex = 0; yIndex < indicatorCount; ++yIndex)
                {
                    Vector3 offset   = new Vector3(xIndex * indicatorDistance, 0.0f, yIndex * indicatorDistance);
                    Vector3 position = corner + offset;

                    Material material = null;
                    // Check inscribed rectangle first
                    if (MixedRealityToolkit.BoundarySystem.Contains(position, Boundary.Type.PlayArea))
                    {
                        material = visualizationProfile.PlayAreaMaterial;
                    }
                    // Then check geometry
                    else if (MixedRealityToolkit.BoundarySystem.Contains(position, Boundary.Type.TrackedArea))
                    {
                        material = visualizationProfile.TrackedAreaMaterial;
                    }

                    if (material != null)
                    {
                        GameObject marker = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                        marker.name                 = "Boundary Demo Marker";
                        marker.transform.parent     = markerParent.transform;
                        marker.transform.position   = position;
                        marker.transform.localScale = Vector3.one * indicatorScale;
                        marker.GetComponent <MeshRenderer>().sharedMaterial = material;
                        markers.Add(marker);
                    }
                }
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="profile"></param>
 public MixedRealityBoundarySystem(MixedRealityBoundaryVisualizationProfile profile)
     : base(profile)
 {
     showFloor                 = profile.ShowFloor;
     floorPhysicsLayer         = profile.FloorPhysicsLayer;
     FloorScale                = profile.FloorScale;
     FloorMaterial             = profile.FloorMaterial;
     showPlayArea              = profile.ShowPlayArea;
     PlayAreaMaterial          = profile.PlayAreaMaterial;
     playAreaPhysicsLayer      = profile.PlayAreaPhysicsLayer;
     BoundaryHeight            = profile.BoundaryHeight;
     showTrackedArea           = profile.ShowTrackedArea;
     TrackedAreaMaterial       = profile.TrackedAreaMaterial;
     trackedAreaPhysicsLayer   = profile.TrackedAreaPhysicsLayer;
     showBoundaryWalls         = profile.ShowBoundaryWalls;
     BoundaryWallMaterial      = profile.BoundaryWallMaterial;
     boundaryWallsPhysicsLayer = profile.BoundaryWallsPhysicsLayer;
     showCeiling               = profile.ShowBoundaryCeiling;
     BoundaryCeilingMaterial   = profile.BoundaryCeilingMaterial;
     ceilingPhysicsLayer       = profile.CeilingPhysicsLayer;
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="profile">The configuration profile for the service.</param>
 /// <param name="scale">The application's configured <see cref="Utilities.ExperienceScale"/>.</param>
 public XRSDKBoundarySystem(
     MixedRealityBoundaryVisualizationProfile profile,
     ExperienceScale scale) : base(profile, scale)
 {
 }