/// <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); } } } }
/// <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) { }