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