API reference
API reference
Select your platform
No SDKs available
No versions available

AnchorPrefabSpawnerUtilities Class

A utility class for spawning prefabs based on anchor data, providing methods to calculate transformations and alignments based on anchor volumes and plane rectangles.
This class facilitates the transformation and alignment of prefabs. Systems similar to the AnchorPrefabSpawner can be created by leveraging this utilites.
Custom prefab spawning system that aligns the prefab to sit in front the anchor's volume:
publicclass FullyCustomAnchorPrefabSpawner : MonoBehaviour
{
public GameObject Prefab; // A prefab to spawn for each anchor
public MRUKAnchor.SceneLabels AnchorsToInclude; // The labels of the anchors for which to spawn the prefab
privatevoid Start()
    {
        MRUK.Instance.RegisterSceneLoadedCallback(() =\>
        {
// Get all anchors in the scene
            var anchors = FindObjectsOfType\<MRUKAnchor\>();
// Iterate over each anchor
foreach (var anchor in anchors)
            {
// Check if the anchor's labels match the exhibit label
if ((anchor.Label \& AnchorsToInclude) == 0)
                {
continue;
                }
                var newPanel = Instantiate(Prefab, anchor.transform);
// Use AnchorPrefabSpawnerUtilities to scale and position the new panel based on the anchor's volume
                var trs = AnchorPrefabSpawnerUtilities.GetTransformationMatrixMatchingAnchorVolume(anchor, false,
true, null);
                newPanel.transform.localPosition = CustomPrefabAlignment(anchor.VolumeBounds.Value, null);
                newPanel.transform.localRotation = trs.rotation;
                newPanel.transform.localScale = trs.lossyScale / 40;
            }
        });
    }
@iverbatim
public Vector3 CustomPrefabAlignment(Bounds anchorVolumeBounds,
    Bounds? prefabBounds)
{
    Vector3 prefabPivot = new();
if (prefabBounds.HasValue)
    {
        var center = prefabBounds.Value.center;
        var min = prefabBounds.Value.min;
        prefabPivot = new Vector3(center.x, center.z, min.y);
    }
    var anchorVolumePivot = anchorVolumeBounds.center;
    anchorVolumePivot.z = anchorVolumeBounds.max.z;
    anchorVolumePivot.y = anchorVolumeBounds.max.y;
return anchorVolumePivot - prefabPivot;
}
@endiverbatim
 }

Static Member Functions

Calculates a transformation matrix that matches the volume of the anchor.
See also AnchorPrefabSpawnerUtilities.GetTransformationMatrixMatchingAnchorPlaneRect for matching the plane rect of an anchor.This method calculates the local scale and pose of a prefab based on the anchor's volume, and then combines these to return a transformation matrix.
Parameters
anchorInfo
The anchor of which volume has to be match.
matchAspectRatio
Whether to match the aspect ratio of the anchor.
calculateFacingDirection
Whether to calculate the facing direction of the anchor.
prefabBounds
The bounds of the prefab.
scalingMode
The scaling mode to use. See AnchorPrefabSpawner.ScalingMode.
alignMode
The alignment mode to use. See AnchorPrefabSpawner.AlignMode.
Returns
A transformation matrix that matches the volume of the anchor.
See Also
AnchorPrefabSpawnerUtilities.GetTransformationMatrixMatchingAnchorPlaneRect
Scales a prefab based on the specified scaling mode.
see also AnchorPrefabSpawnerUtilities.ScalePrefab(Vector2, AnchorPrefabSpawner.ScalingMode) for for scaling a prefab based on the anchor's plane rect.Example usage:
var anchor = FindObjectsOfType\<MRUKAnchor\>()[0];
var prefabSize = prefabBounds?.size ?? Vector3.one;
var scale = new Vector3(VolumeBounds.Value.size.x / prefabSize.x, VolumeBounds.Value.size.z / prefabSize.y
       VolumeBounds.Value.size.y / prefabSize.z);
scale = AnchorPrefabSpawnerUtilities.ScalePrefab(scale, AnchorPrefabSpawner.ScalingMode.Stretch);
The scaling logic modes are as follows:
  • UniformScaling If the scaling mode is UniformScaling, it scales the prefab uniformly based on the smallest axis.
  • UniformXZScaling If the scaling mode is UniformXZScaling, it scales the prefab uniformly on the X and Z axes
  • NoScaling If the scaling mode is NoScaling, it returns a unit vector.
  • Custom If the scaling mode is Custom, it uses the provided custom scaling logic. See also AnchorPrefabSpawner.CustomPrefabScaling(Vector3).
  • Stretch If the scaling mode is Stretch, it returns the anchor's original local scale.
Parameters
localScale
The local scale of the prefab.
scalingMode
The scaling mode to use. See AnchorPrefabSpawner.ScalingMode.
Returns
The scaled local scale of the prefab.
Aligns the pivot points of a prefab and of the anchors' volume based on the specified AnchorPrefabSpawner.AlignMode.
See also AnchorPrefabSpawnerUtilities.AlignPrefabPivot(Rect, Bounds?, Vector2, AnchorPrefabSpawner.AlignMode) for aligning a prefab based on the anchor's plane rect.Example usage:
var anchor = FindObjectsOfType\<MRUKAnchor\>()[0];
var volumeBounds = anchor.VolumeBounds.Value;
var prefabBounds = Utilities.GetPrefabBounds(prefab);
var prefabSize = prefabBounds?.size ?? Vector3.one;
var scale = new Vector3(volumeSize.x / prefabSize.x, volumeSize.z / prefabSize.y,
       volumeSize.y / prefabSize.z);
scale = AnchorPrefabSpawnerUtilities.ScalePrefab(scale, AnchorPrefabSpawner.ScalingMode.Stretch);
var localPosition = AnchorPrefabSpawnerUtilities.AlignPrefabPivot(volumeBounds, prefabBounds, scale,
       AnchorPrefabSpawner.AlignMode.Automatic);
The alignment logic modes are as follows:
  • Automatic If the alignment mode is Automatic or Bottom, it aligns the pivot at the bottom center of the prefab and the anchor's volume.
  • Center If the alignment mode is Center, it aligns the pivot at the center of the prefab.
  • Custom If the alignment mode is Custom, it uses the provided custom alignment logic. See also AnchorPrefabSpawner.CustomPrefabAlignment(Bounds,Bounds?).
Parameters
anchorVolumeBounds
The volume bounds of the anchor.
prefabBounds
The bounds of the prefab.
localScale
The local scale of the prefab.
alignMode
The alignment mode to use. See AnchorPrefabSpawner.AlignMode.
Returns
The pivot points of the prefab and of the anchor's volume.
Selects a prefab from a list that has the closest size to the volume of an anchor.
This method selects a prefab from a list that has the closest size to the volume of an anchor. It first checks if the anchor has a volume. If not, it throws an exception. It then calculates the volume of the anchor and each prefab in the list. It selects the prefab with the smallest difference in size to the anchor's volume.
Parameters
anchor
The anchor to compare sizes with.
prefabList
The list of prefabs to select from.
sizeMatchingPrefab
The selected prefab with the closest size to the anchor's volume.
Returns
True if a matching prefab is found, false otherwise.
See Also
MRUKAnchor.VolumeBounds
Calculates a transformation matrix that matches the plane rectangle of the anchor.
See also AnchorPrefabSpawnerUtilities.GetTransformationMatrixMatchingAnchorVolume for matching the volume of an anchor.This method calculates and returns a transformation matrix for a prefab that matches the plane rect of an anchor, by determining the local scale and pose of the prefab based on the rect.
Parameters
anchorInfo
Information about the anchor.
prefabBounds
The bounds of the prefab.
scaling
The scaling mode to use. See AnchorPrefabSpawner.ScalingMode.
alignment
The alignment mode to use. See AnchorPrefabSpawner.AlignMode.
Returns
A transformation matrix that matches the plane rectangle of the anchor.
See Also
MRUKAnchor.PlaneRect
Selects a prefab based on the specified selection mode.
This method selects a prefab based on the specified selection mode. If the selection mode is Random, it selects a random prefab from the list. If the selection mode is ClosestSize, it selects the prefab with the closest size to the anchor. If the selection mode is Custom, it uses the provided custom selection logic.
Parameters
anchor
The anchor to use for selection.
prefabSelectionMode
The selection mode to use. See AnchorPrefabSpawner.SelectionMode.
prefabs
The list of prefabs to select from.
random
The random generator used to generate the index of the prefab to be selected
Returns
True if a prefab was selected, false otherwise.
Aligns the pivots of a prefab and of the anchor's plane rect, based on the specified AnchorPrefabSpawner.AlignMode.
Example usage:
var anchor = FindObjectsOfType\<MRUKAnchor\>()[0];
var prefabBounds = Utilities.GetPrefabBounds(prefab);
var prefabSize = prefabBounds?.size ?? Vector3.one;
var scale = new Vector2(anchor.PlaneRect.Value.size.x / prefabSize.x, anchor.PlaneRect.Value.size.y);
scale = AnchorPrefabSpawnerUtilities.ScalePrefab(scale, AnchorPrefabSpawner.ScalingMode.Stretch);
var localPosition = AnchorPrefabSpawnerUtilities.AlignPrefabPivot(anchor.PlaneRect.Value, prefabBounds, scale,
       AnchorPrefabSpawner.AlignMode.Automatic);
The alignment logic modes are as follows:]
  • Automatic If the alignment mode is Automatic or Center, it aligns the pivot at the center of the prefab.
  • Bottom If the alignment mode is Bottom, it aligns the pivot at the bottom of the prefab.
  • Custom If the alignment mode is Custom, it uses the provided custom alignment logic. See also AnchorPrefabSpawner.CustomPrefabAlignment(Rect,Bounds?).
Parameters
planeRect
The plane rectangle of the anchor.
prefabBounds
The bounds of the prefab.
localScale
The local scale of the prefab.
alignMode
The alignment mode to use. See AnchorPrefabSpawner.AlignMode.
Returns
The pivot points of the prefab and the anchor plane rectangle.
Scales a prefab based on the specified scaling mode.
See also AnchorPrefabSpawnerUtilities.ScalePrefab(Vector3, AnchorPrefabSpawner.ScalingMode) for scaling a prefab based on the anchor's volume.Example usage:
var anchor = FindObjectsOfType\<MRUKAnchor\>()[0];
var prefabBounds = Utilities.GetPrefabBounds(prefab);
var prefabSize = prefabBounds?.size ?? Vector3.one;
var scale = new Vector2(anchor.PlaneRect.Value.size.x / prefabSize.x, anchor.Plane
.Rect.Value.size.y / prefabSize.y);
scale = AnchorPrefabSpawnerUtilities.ScalePrefab(scale, AnchorPrefabSpawner.ScalingMode.Stretch);
The scaling logic modes are as follows:
  • Stretch If the scaling mode is Stretch, it returns the original local scale.
  • UniformScaling If the scaling mode is UniformScaling or UniformXZScaling, it scales the prefab uniformly.
  • NoScaling If the scaling mode is NoScaling, it returns a unit vector.
  • Custom If the scaling mode is Custom, it uses the provided custom scaling logic.
Parameters
localScale
The local scale of the prefab.
scalingMode
The scaling mode to use. See AnchorPrefabSpawner.ScalingMode.
Returns
The scaled local scale of the prefab.
Did you find this page helpful?
Thumbs up icon
Thumbs down icon