using System;
namespace UnityEngine.XR.ARSubsystems
{
///
/// Defines the interface for a _trackable_. A trackable represents anything that can be detected and tracked
/// in the physical environment.
///
public interface ITrackable
{
///
/// The `TrackableId` associated with this trackable.
///
/// The `TrackableId`.
TrackableId trackableId { get; }
///
/// The `Pose`, in session space, associated with this trackable.
///
/// The pose.
///
/// Some `ITrackable` implementations are MonoBehaviours, and you can use the Transform component of their
/// GameObjects to access the position and rotation of a trackable in Unity world space. For other trackables
/// without associated GameObjects, you can convert a session-space pose to Unity world space if needed by
/// using the example code below, assuming the XR Origin has a uniform scale of (1, 1, 1):
///
/// var origin = FindAnyObjectByType<XROrigin>().transform;
/// var originPose = new Pose(origin.position, origin.rotation);
/// var worldSpacePose = pose.GetTransformedBy(xrOriginPose);
///
///
Pose pose { get; }
///
/// The `TrackingState` associated with this trackable.
///
/// The `TrackingState`.
TrackingState trackingState { get; }
///
/// The native pointer associated with this trackable.
///
/// The native pointer.
///
/// The data pointed to by this pointer is defined by the provider plug-in implementation.
/// Refer to the provider documentation for each platform your app supports to learn more about the value of
/// this pointer on your target platform(s).
///
IntPtr nativePtr { get; }
}
}