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空間中不運動的物體或這個物體的父節點。它可能是 Origin,Camera 或某個 `target` 。 `Target` 可以是包含TargetController或BlockRootController組件的物體。在使用稀疏空間地圖和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 == SpecificTarget時CenterObject將被設成這個物體。可隨時修改,立即生效。
該物體必須包含TargetController或BlockRootController組件。
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