useXRRequestHitTest
useXRRequestHitTest(): (
relativeTo,trackableType?) =>undefined|Promise<undefined| {getWorldMatrix: (...args) =>boolean;results:XRHitTestResult[]; }>
Hook that returns a function to request a single hit test. Cannot be called in the useFrame hook.
Returns
Parameters relativeTo(
relativeTo,trackableType?):undefined|Promise<undefined| {getWorldMatrix: (...args) =>boolean;results:XRHitTestResult[]; }>
XRSpace | XRReferenceSpaceType | RefObject<null | Object3D<Object3DEventMap>>
XRHitTestTrackableType | XRHitTestTrackableType[]
undefined | Promise<undefined | { getWorldMatrix: (...args) => boolean; results: XRHitTestResult[]; }>
Example
const matrixHelper = new Matrix4()
function EventDrivenHitTest() {
const requestHitTest = useXRRequestHitTest()
const [placedObjects, setPlacedObjects] = useState<Vector3[]>([])
const handleTap = async () => {
const hitTestResult = await requestHitTest('viewer', ['plane', 'mesh'])
const { results, getWorldMatrix } = hitTestResult
if (results?.length > 0) {
getWorldMatrix(matrixHelper, results[0])
const position = new Vector3().setFromMatrixPosition(matrixHelper)
setPlacedObjects((prev) => [...prev, position])
}
}
return (
<>
<IfInSessionMode allow={'immersive-ar'}>
<XRDomOverlay>
<button onClick={handleTap}>Place Object</button>
</XRDomOverlay>
</IfInSessionMode>
{placedObjects.map((position, index) => (
<mesh key={index} position={position}>
<sphereGeometry args={[0.1]} />
<meshBasicMaterial color="blue" />
</mesh>
))}
</>
)
}