Class ARMarker
Represents a visual marker, like a QR code or an AprilTag, that has been detected in the physical environment.
Inheritance
Implements
Inherited Members
Namespace: UnityEngine.XR.ARFoundation
Assembly: Unity.XR.ARFoundation.dll
Syntax
[DefaultExecutionOrder(-2147483646)]
[DisallowMultipleComponent]
public class ARMarker : ARTrackable<XRMarker, ARMarker>, ITrackable
Remarks
Generated by the ARMarkerManager when an AR device detects a marker in the environment.
Related information: AR Marker component
Properties
dataBuffer
Provides metadata that describes the embedded data available for this marker, such as its type.
Declaration
public XRSpatialBuffer dataBuffer { get; }
Property Value
Type | Description |
---|---|
XRSpatialBuffer |
Remarks
To get the encoded data, you should first inspect the bufferType property of the returned buffer. Based on the buffer type, you can then call the appropriate method to retrieve the data, such as TryGetStringData() for text based encoded data or TryGetBytesData(Allocator) for binary data.
For convenience, if you already know the expected encoded data type (for example, you are only scanning QR codes with URLs), you can call TryGetStringData() directly without first checking this buffer.
markerId
A numerical identifier for the marker, specific to its type.
Declaration
public int markerId { get; }
Property Value
Type | Description |
---|---|
int |
Remarks
For the ArUco
or AprilTag
marker types, gets the numerical ID encoded in the tag.
For other types, this value isn't relevant.
markerType
The type of the detected marker.
Declaration
public XRMarkerType markerType { get; }
Property Value
Type | Description |
---|---|
XRMarkerType |
Remarks
This indicates the family of the marker, such as QRCode or ArUco. You can use this to handle different types of markers in your application.
size
The physical size of the detected marker in meters.
Declaration
public Vector2 size { get; }
Property Value
Type | Description |
---|---|
Vector2 |
Remarks
This value represents the width and height of the marker. The X component (size.x) represents the width and corresponds to the marker's local X-axis. The Y component (size.y) represents the height and corresponds to the marker's local Z-axis.
Methods
TryGetBytesData()
Attempts to get the encoded data of a specific marker, decoded as a byte array.
Declaration
public Result<byte[]> TryGetBytesData()
Returns
Type | Description |
---|---|
Result<byte[]> | A |
Remarks
To determine if a marker's encoded data is available as binary data, you can check its dataBuffer property. If the bufferType is Uint8, this method should be used to retrieve the encoded data.
This method allocates a new managed byte[]
on each successful call. For performance critical applications
that need to avoid garbage collection, consider using the (TryGetBytesData(Allocator)).
Exceptions
Type | Condition |
---|---|
InvalidOperationException | Thrown if the required ARMarkerManager instance cannot be found. |
TryGetBytesData(Allocator)
Attempts to get the encoded data of a specific marker, decoded as a NativeArray_1.
Declaration
public Result<NativeArray<byte>> TryGetBytesData(Allocator allocator)
Parameters
Type | Name | Description |
---|---|---|
Allocator | allocator | The allocator to use for the returned NativeArray_1. |
Returns
Type | Description |
---|---|
Result<NativeArray<byte>> | A |
Remarks
This method is useful for performance sensitive applications as it avoids managed memory allocations. The caller is responsible for disposing the returned NativeArray_1 for persistent allocators.
Exceptions
Type | Condition |
---|---|
InvalidOperationException | Thrown if the required ARMarkerManager instance cannot be found. |
TryGetStringData()
Attempts to get the encoded data of a specific marker, decoded as a string.
Declaration
public Result<string> TryGetStringData()
Returns
Type | Description |
---|---|
Result<string> | A |
Remarks
To determine if a marker's encoded data is available as a string, you can check its dataBuffer property. If the bufferType is String, this method should be used to retrieve the encoded data.
Alternatively, if you expect string data (for example, you are scanning QR codes with URLs), you can call this method directly and check the status to see if it was successful.
Exceptions
Type | Condition |
---|---|
InvalidOperationException | Thrown if the required ARMarkerManager instance cannot be found. |