Table of Contents

Class MotionTrackerFrameSource

命名空間
easyar
組件
EasyAR.Sense.dll

在場景中控制easyar.MotionTrackerCameraDeviceMonoBehaviour,在Unity環境下提供功能擴展。

這個frame source是一種運動追蹤設備,在ARSession中會輸出運動數據。

public class MotionTrackerFrameSource : FrameSource
繼承
MotionTrackerFrameSource
繼承成員

屬性

Camera

僅當建立新frame source時提供。僅會在Assemble()過程中被存取。

在桌面裝置或手機上,該相機代表現實環境中相機裝置在虛擬世界中對應的Camera,其投影矩陣和位置都將與真實相機對應,受EasyAR控制。在頭戴式顯示器上,該相機僅用於將診斷文字展示於眼前,不用於畫面渲染,相機亦不受EasyAR控制。

protected override Camera Camera { get; }

CameraCandidate

Camera的備選,僅當未使用Unity XR Origin時有效,如未設定會使用Camera.main。

public Camera CameraCandidate { get; set; }

CameraFrameStarted

僅當建立新frame source時提供。會在ARSession的整個生命週期內被存取。

相機幀是否開始輸入。

protected override bool CameraFrameStarted { get; }

DesiredFocusMode

期望的對焦模式,需在DeviceOpened事件或OnEnable前修改才有效。

注意:受硬體或系統限制,對焦開關在部分裝置上可能無效。

public Optional<MotionTrackerCameraDeviceFocusMode> DesiredFocusMode { get; set; }

DesiredFrameRate

期望的裝置幀率,需在DeviceOpened事件或OnEnable前修改才有效。

public Optional<MotionTrackerCameraDeviceFPS> DesiredFrameRate { get; set; }

DesiredMinQualityLevel

期望的最低允許品質級別,需在Assemble()前修改才有效。

public Optional<MotionTrackerCameraDeviceQualityLevel> DesiredMinQualityLevel { get; set; }

DesiredResolution

期望的解析度,需在DeviceOpened事件或OnEnable前修改才有效。

若在FrameRecorder錄製過程中修改影像大小,錄製數據將停止更新,需關閉後重新錄製。

public Optional<MotionTrackerCameraDeviceResolution> DesiredResolution { get; set; }

DesiredTrackingMode

期望的追蹤模式,需在session啟動前修改才有效。

public Optional<MotionTrackerCameraDeviceTrackingMode> DesiredTrackingMode { get; set; }

DeviceCameras

僅當建立新frame source時提供。會在CameraFrameStarted為true時被存取。

提供相機幀數據的裝置相機。若相機幀數據由多個相機提供,清單需包含所有相機。

確保在CameraFrameStarted為true時數值正確。

protected override List<FrameSourceCamera> DeviceCameras { get; }

DeviceQualityLevel

取得裝置上Motion Tracking的品質,結合應用場景,可透過此值判斷是否啟動Motion Tracking。

public static MotionTrackerCameraDeviceQualityLevel DeviceQualityLevel { get; }

Display

僅當建立新frame source時提供。僅會在Assemble()過程中被存取。

提供顯示系統資訊。可使用DefaultSystemDisplayDefaultHMDDisplay取得預設顯示資訊。

protected override IDisplay Display { get; }

FrameRateRange

幀率範圍。僅在Opened為true時可用。

public Vector2 FrameRateRange { get; }

IsAvailable

僅當建立新frame source時提供。僅會在Assemble()過程中被存取。

目前frame source是否可用。

若數值等於null,將呼叫CheckAvailability(),數值將在Coroutine結束後取得。

protected override Optional<bool> IsAvailable { get; }

IsCameraUnderControl

僅當建立新frame source時提供。僅會在Assemble()過程中被存取。

當值為ture時,session會更新相機的transform,且會渲染相機影像。

建立頭戴式顯示器擴充時,應設為false。你應完全控制場景中的3D相機,並處理相機渲染,特別是在VST模式下。

protected override bool IsCameraUnderControl { get; }

IsHMD

僅當建立新frame source時提供。僅會在Assemble()過程中被存取。

目前frame source是否為頭戴式顯示器。若是頭戴式顯示器,診斷資訊將顯示在相機前的3D板子上。

部分frame filter在裝置上運行會有差異。

protected override bool IsHMD { get; }

LocalPointCloud

目前點雲數據位置資訊。僅在Opened為true時可用。

public List<Vector3> LocalPointCloud { get; }

Opened

相機是否開啟。

public bool Opened { get; }

Size

目前影像大小。僅在OpenedMonoBehaviour.enabled皆為true時可用。

public Vector2Int Size { get; }

方法

Close()

關閉裝置。

public void Close()

HitTestAgainstHorizontalPlane(Vector2)

在目前視野內即時偵測的水平面上進行Hit Test,點擊到水平面後返回該平面上距離Hit Test射線最近的3D點位置座標。pointInView需歸一化至[0,1]^2。

public List<Vector3> HitTestAgainstHorizontalPlane(Vector2 pointInView)

參數

pointInView

HitTestAgainstPointCloud(Vector2)

在目前點雲中進行Hit Test,取得距離相機從近到遠一條射線上最近的3D點位置座標。pointInView需歸一化至[0,1]^2。

public List<Vector3> HitTestAgainstPointCloud(Vector2 pointInView)

參數

pointInView

OnSessionStart(ARSession)

僅當建立新frame source時提供。僅會在StartSession()過程中被存取。

處理session啟動(若此frame source已組裝進Assembly)。此方法設計用於延遲初始化,可在此方法中進行AR獨有的初始化工作。

protected override void OnSessionStart(ARSession session)

參數

session

OnSessionStop()

僅當建立新frame source時提供。會在StopSession(bool)或其他session停止/損毀過程中被存取。

處理session停止(若此frame source已組裝進Assembly)。可使用此方法銷毀StartSession()及session運行中建立的資源並恢復內部狀態。session銷毀前此方法保證被呼叫。若frame source在session之前銷毀,將不會被呼叫且session會損毀。

protected override void OnSessionStop()

Open()

開啟裝置。若未手動呼叫Open()Close()ARSession啟動後會自動Open()

public void Open()

事件

DeviceClosed

設備關閉的事件。

public event Action DeviceClosed

DeviceOpened

設備開啟的事件,布林值表示是否成功。

public event Action<bool, PermissionStatus, string> DeviceOpened