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