Table of Contents

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空间中不运动的物体或这个物体的父节点。它可能是 OriginCamera 或某个 `target` 。 `Target` 可以是包含TargetControllerBlockRootController组件的物体。在使用稀疏空间地图和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 == SpecificTargetCenterObject将被设成这个物体。可随时修改,立即生效。

该物体必须包含TargetControllerBlockRootController组件。

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