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