in SampleProject/Assets/Microsoft.Maps.Unity.Examples/Common/Scripts/MapRaycastProvider.cs [38:98]
public bool Raycast(
RayStep step,
LayerMask[] prioritizedLayerMasks,
bool focusIndividualCompoundCollider,
out MixedRealityRaycastHit hitInfo)
{
var hasPhysicsHit =
MixedRealityRaycaster.RaycastSimplePhysicsStep(
step,
prioritizedLayerMasks,
focusIndividualCompoundCollider,
out RaycastHit physicsHit);
MapRendererRaycastHit? closestMapHitInfo = null;
MapRenderer closestMapRenderer = null;
foreach (var mapRenderer in _mapRenderers)
{
if (
mapRenderer.Raycast(
step,
out var mapHitInfo,
hasPhysicsHit ? physicsHit.distance : step.Length))
{
if (hasPhysicsHit)
{
if (physicsHit.distance > mapHitInfo.Distance)
{
if (!closestMapHitInfo.HasValue || closestMapHitInfo.Value.Distance > mapHitInfo.Distance)
{
closestMapRenderer = mapRenderer;
closestMapHitInfo = mapHitInfo;
}
}
}
else
{
if (!closestMapHitInfo.HasValue || closestMapHitInfo.Value.Distance > mapHitInfo.Distance)
{
closestMapRenderer = mapRenderer;
closestMapHitInfo = mapHitInfo;
}
}
}
}
if (closestMapHitInfo != null)
{
hitInfo = new MixedRealityRaycastHit();
var mapRendererHitInfo = closestMapHitInfo.Value;
hitInfo.distance = mapRendererHitInfo.Distance;
hitInfo.point = mapRendererHitInfo.Point;
hitInfo.normal = mapRendererHitInfo.Normal;
hitInfo.transform = closestMapRenderer.transform;
return true;
}
else
{
hitInfo = new MixedRealityRaycastHit(hasPhysicsHit, physicsHit);
return hasPhysicsHit;
}
}