Session 的流程控制
在 session 的運行過程中,有時需要對 session 組件進行修改,這時就需要停止再重新啟動 session。有時還可能需要停止 session 的某些輸出。本文介紹瞭如何控制 session 的運行流程。
開始之前
- 通過 ARSession 簡介 瞭解 session 的基本概念、組成和工作流程
- 瞭解如何 建立 session
Session 的組裝
通常在啟動 session 時會自動觸發組裝過程。
下面這段程式碼會隱式執行組裝過程。
Session.StartSession();
有些時候,比如需要提前 判斷可用性和裝置支援,也可以使用 Assemble() 手動觸發 session 組裝過程:
StartCoroutine(Session.Assemble());
附註
Assemble() 返回一個協程,需要透過 StartCoroutine(IEnumerator) 啟動。
啟動 session
AutoStart 控制 session 是否自動啟動。如果 AutoStart 為 true(預設值),則在 MonoBehaviour.Start() 時 session 會自動啟動。
session 也可以手動啟動,這需要提前修改 AutoStart 為 false。然後可以使用 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 完成。
後續步驟
- 嘗試 存取 AR 功能組件,瞭解更多 AR 功能的控制方法
- 瞭解如何 取得 session 的運行結果
- 瞭解如何 判斷可用性和裝置支援