Class ARSession
- 命名空间
- easyar
- 程序集
- EasyAR.Sense.dll
在场景中控制AR会话的MonoBehaviour。一个会话包含一组组装成ARAssembly的组件,并控制整个生命周期的数据流。这个组件是AR的入口。同一时刻不允许出现多个active的实例。
EasyAR组件的所有功能必须在StartSession()之后才能使用。
Camera和一部分AR组件之间的相对transform是受session控制的,其中的一个物体被称为CenterObject,它在场景中不动,其它物体相对这个CenterObject运动。这个物体是根据CenterMode的数值进行选择的。更详细的说明可以查看ARSession.ARCenterMode的描述。
[DefaultExecutionOrder(-2147483648)]
[DisallowMultipleComponent]
[RequireComponent(typeof(EasyARController), typeof(DiagnosticsController))]
[RequireComponent(typeof(FrameRecorder), typeof(FramePlayer), typeof(CameraImageRenderer))]
public class ARSession : MonoBehaviour
- 继承
-
ARSession
字段
AutoStart
MonoBehaviour.Start时自动启动session。如果设置为false,你需要手动调用StartSession()来启动session。
[SerializeField]
[HideInInspector]
public bool AutoStart
CenterMode
AR中心模式。可随时修改,立即生效。如果指定的模式不可用,它将会被自动修改为可用的模式。
[SerializeField]
[HideInInspector]
public ARSession.ARCenterMode CenterMode
HorizontalFlip
水平镜像渲染模式。可随时修改,立即生效。仅在使用图像或物体跟踪时可用。
[SerializeField]
[HideInInspector]
public ARSession.FlipOptions HorizontalFlip
属性
AssembleOptions
Session 的组装选项,需要在Assemble()(如果之前没有调用,StartSession()会隐式调用)前设置。
public AssembleOptions AssembleOptions { get; }
Assembly
AR组件的组装体。
public ARAssembly Assembly { get; }
AvailableCenterMode
当前session可用的中心模式。
public IReadOnlyList<ARSession.ARCenterMode> AvailableCenterMode { get; }
CenterObject
这个session在当前帧使用的中心物体。
这个物体表示在Unity空间中不运动的物体或这个物体的父节点。它可能是 Origin,Camera 或某个 `target` 。 `Target` 可以是包含TargetController或BlockRootController组件的物体。在使用稀疏空间地图和EasyAR Mega的时候,实际的中心GameObject是root节点下具体定位到的map或block物体,CenterObject 是这个物体的父节点。更详细的说明可以查看ARSession.ARCenterMode的描述。
public GameObject CenterObject { get; }
Diagnostics
Session诊断组件。
public DiagnosticsController Diagnostics { get; }
Origin
在任一运动跟踪功能运行时的session原点。
它将会从场景中被自动选择,如果不存在则会由EasyAR或第三方frame source扩展创建。使用内置frame source时,如果Unity XR框架的XROrigin存在,它会被选择。如果AR Foundation的包不存在,保持默认树结构的XR Origin才会被选择。
public GameObject Origin { get; }
Report
Session 报告。它在assemble完成后可用查看,且会在session状态改变时更新。它用于查看session损坏的详细信息或组件可用性等详细信息。
public SessionReport Report { get; }
SpecificTargetCenter
手动指定的中心物体。CenterMode == SpecificTarget时CenterObject将被设成这个物体。可随时修改,立即生效。
该物体必须包含TargetController或BlockRootController组件。
public GameObject SpecificTargetCenter { get; set; }
State
当前session的状态。
public ARSession.SessionState State { get; }
TrackingStatus
在任一运动跟踪功能运行时的运动跟踪状态。
public Optional<MotionTrackingStatus> TrackingStatus { get; }
方法
Assemble()
使用AssembleOptions组装session。如果调用过,它会在StartSession()中自动调用。
public IEnumerator Assemble()
ImageCoordinatesFromScreenCoordinates(Vector2)
从屏幕坐标系([0, 1]^2)变换到图像坐标系([0, 1]^2)。pointInView 需要被归一化到[0, 1]^2。头显上不可用。
public Optional<Vector2> ImageCoordinatesFromScreenCoordinates(Vector2 pointInView)
参数
pointInView
StartSession()
启动session。如果AutoStart是true,它会在MonoBehaviour.Start中自动调用。
public void StartSession()
StopSession(bool)
停止启动session。所有transform更新和图像渲染更新将会停止。你可用旋转在停止时保留最后一帧图像,但只能在EasyAR控制图像渲染时有效(AR Foundation和头显等无效)。
public void StopSession(bool keepLastFrame)
参数
keepLastFrame
事件
AssembleUpdate
session Assemble()更新事件。在一次Assemble()(如果之前没有调用,StartSession()会隐式调用)中这个事件会被触发1-2次。其中第一次是Assemble完成时。如果Assemble完成时设备列表更新已经完成将不会有第二次调用,否则第二次调用将在设备列表更新完成时发生。
public event Action<SessionReport.AvailabilityReport> AssembleUpdate
InputFrameUpdate
输入帧更新事件,仅在session显示的InputFrame产生变化时触发。头显上不会收到此事件,且如果存在透视图像,其渲染由设备完成。
public event Action<InputFrame> InputFrameUpdate
PostSessionUpdate
Session更新完成事件,该事件频率和MonoBehaviour.Update频率相同(在头显上需要扩展作者正确实现)。在该事件触发时,该帧内所有受EasyAR控制的transform变化已经完成。
public event Action PostSessionUpdate
StateChanged
session State改变的事件。
public event Action<ARSession.SessionState> StateChanged