using System;
#if USE_LEGACY_INPUT_HELPERS
using UnityEngine.SpatialTracking;
#endif
using Unity.XR.CoreUtils;
namespace UnityEngine.XR.ARFoundation
{
///
/// An ARSessionOrigin is the parent for an AR setup. It contains a Camera and
/// any GameObjects created from detected features, such as planes or point clouds.
///
///
/// Session space vs. Unity space
///
/// Because an AR device will be used to drive the Camera's position and rotation,
/// you cannot directly place the Camera at an arbitrary position in the Unity scene.
/// Instead, you should position the ARSessionOrigin. This makes the Camera
/// (and any detected features) relative to that as a result.
///
/// It is important to keep the Camera and detected features in the same space relative to
/// each other (otherwise, detected features like planes won't appear in the correct place relative
/// to the Camera). The space relative to the AR device's starting position is called
/// "session space" or "device space". For example, when the AR session begins, the device might
/// report its position as (0, 0, 0). Detected features, such as planes, will be reported relative
/// to this starting position. The purpose of the ARSessionOrigin is to convert the session space
/// to Unity world space.
///
/// To facilitate this, the ARSessionOrigin creates a new GameObject called "Trackables"
/// as a sibling of its Camera. This should be the parent GameObject for all
/// detected features.
///
/// At runtime, a typical scene graph might look like this:
/// - AR Session Origin
/// - Camera
/// - Trackables
/// - Detected plane 1
/// - Detected plane 2
/// - Point cloud
/// - etc...
///
/// You can access the "trackables" GameObject with .
///
/// Note that the localPosition and localRotation of detected trackables
/// remain in real-world meters relative to the AR device's starting position and rotation.
///
/// Scale
///
/// If you want to scale the content rendered by the ARSessionOrigin you should apply
/// the scale to the ARSessionOrigin's transform. This is preferrable to scaling
/// the content directly, which can have undesirable side effects. Physics and NavMeshes,
/// for example, do not perform well when scaled very small.
///
[DisallowMultipleComponent]
[Obsolete("ARSessionOrigin has been deprecated. Use XROrigin instead.")]
[HelpURL(typeof(ARSessionOrigin))]
public class ARSessionOrigin : XROrigin
{
///
/// (Deprecated) The Camera to associate with the AR device. It must be a child of this ARSessionOrigin.
///
[Obsolete("camera has been deprecated. Use Camera instead.")]
#if UNITY_EDITOR
public new Camera camera
#else
public Camera camera
#endif
{
get => Camera;
set => Camera = value;
}
///
/// (Deprecated) The parent Transform for all "trackables" (for example, planes and feature points).
///
[Obsolete("trackablesParent has been deprecated. Use TrackablesParent instead.")]
public Transform trackablesParent => TrackablesParent;
}
}