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

enabled

session運行時啟用/禁用輸出。在禁用狀態下,session不會輸出,相機圖像(如果由EasyAR控制)和所有session物體的transform都不會更新。

public bool enabled { get; set; }

方法

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