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