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; } }