Table of Contents

session 的流程控制

在 session 的运行过程中,有时需要对 session 组件进行修改,这时就需要停止再重新启动 session。有时还可能需要停止 session 的某些输出。本文介绍了如何控制 session 的运行流程。

开始之前

session 的组装

通常在启动 session 时会自动触发组装过程。

下面这段代码会隐式执行组装过程。

Session.StartSession();

有些时候,比如需要提前 判断可用性和设备支持,也可以使用 Assemble() 手动触发 session 组装过程:

StartCoroutine(Session.Assemble());
注意

Assemble() 返回一个协程,需要通过 StartCoroutine(IEnumerator) 启动。

启动 session

AutoStart 控制 session 是否自动启动。如果 AutoStarttrue(默认值),则在 MonoBehaviour.Start() 时 session 会自动启动。

session 也可以手动启动,这需要提前修改 AutoStartfalse。然后可以使用 StartSession() 来启动 session。

Session.StartSession();

停止 session

可以使用 StopSession(bool) 来停止 session。

Session.StopSession(keepLastFrame);

可以通过参数 keepLastFrame 来控制 session 停止后是否保留最后一帧的物理相机图像。这在需要切换不同 session 时比较有用,可以避免画面闪烁。

注意

keepLastFrame 只能控制那些由 EasyAR 进行画面绘制的 session。一般来说,使用 AR Foundation 或头显时该参数无效。

停止 session 输出

session 运行时,可以通过 enabled 来控制 session 的输出。

下面这段代码可以停止 session 的所有输出,这时 session 仍然处于运行状态,但不会更新任何内容(包括由 EasyAR 绘制的物理相机画面和所有 EasyAR 控制的节点的 transform 等)。

Session.enabled = false;

停止 session 绘制物理相机图像

可以使用 ARAssembly.CameraImageRenderer 来控制物理相机图像的绘制。

下面这段代码可以停止物理相机图像的绘制:

if (Session.Assembly != null && Session.Assembly.CameraImageRenderer.OnSome)
{
    Session.Assembly.CameraImageRenderer.Value.enabled = false;
}

需要注意的是,这里需要先判断 ARAssembly.CameraImageRenderer 是否存在。

注意

ARAssembly.CameraImageRenderer 只在由 EasyAR 进行画面绘制的 session 中有效。一般来说,使用 AR Foundation 或头显时是无效的,这时物理相机画面的绘制由 AR Foundation 或头显 SDK 完成。

后续步骤