Contents

raycast(origin:direction:length:query:mask:relativeTo:)

Performs a ray cast against all the geometry in the scene for a ray of a given origin, direction, and length.

Declaration

@MainActor @preconcurrency func raycast(origin: SIMD3<Float>, direction: SIMD3<Float>, length: Float = 100, query: CollisionCastQueryType = .all, mask: CollisionGroup = .all, relativeTo referenceEntity: Entity? = nil) -> [CollisionCastHit]

Parameters

  • origin:

    The origin of the ray relative to referenceEntity.

  • direction:

    The direction of the ray relative to referenceEntity.

  • length:

    The length of the ray relative to referenceEntity.

  • query:

    A query type.

  • mask:

    A collision mask that you can use to prevent collisions with certain objects.

  • referenceEntity:

    An entity that defines the frame of reference. The method returns results relative to this entity. Set to nil to use the world space origin (0, 0, 0).

Return Value

An array of collision cast hit results. Each hit indicates where the ray, starting at a given point and traveling in a given direction, hit a particular entity in the scene.

Discussion

The method ignores entities that lack a CollisionComponent.

The normal property on returned result objects contains the surface normal at the point of intersection with the entity’s collision shape.

The following are some details to keep in mind.

  • The ray needs to fully intersect a primitive for a hit to be detected. In particular, it is not enough for the ray to precisely tangent or end at the primitive’s surface. This becomes especially important when ray casting against primitives that are far away from the ray origin.

  • Due to numerical imprecision, it may be necessary to use a slightly longer ray length than your desired maximum distance in order to ensure that a full intersection occurs with your target primitive. Moreover, the length of the ray needs to be a positive finite number that is smaller than greatestFiniteMagnitude.

See Also

Detecting intersections