Releases: magicleap/MagicLeapUnitySDK
Releases · magicleap/MagicLeapUnitySDK
1.7.0
Features
- Minimum ML API level updated to
26
.
Bugfixes
- Fixed compiler errors when the package
com.unity.xr.openxr
is also installed. - Fixed
MLDepthCamera
errors when closing the application. - Improved performance of
MLWebRTC.MLCameraVideoSource
by making it start the video capture asynchronously. - Fixed enforcement of MLCamera's near clip distance when "Fix problems on startup" is enabled
- Fixed occasional crash when changing scenes while
MLMediaPlayer
is playing local video file - Addressed
MLAnchors
query timing to reduce likelihood of missing pose errors. - Fixed CV camera errors when resuming from sleep mode
- Fixed CV camera errors when resuming from menu
- Fixed
MLWorldCamera
Invalid Parameter error spams. - Renamed Tests assembly definition.
- Fixed caching logic for
CustomHapticsPattern
s to avoid using incorrect cached patterns. - Fixed
MLVoice.IntentEvent
's EventSlotsUsed list within theOnVoiceEvent
so it properly lists all Slots used in the voice command. - Optimized
MLMeshing
API and components to reduce memory usage. - Fixed spamming errors caused by not detecting eyes in the eye tracking example.
Deprecations & Removals
- The MLMediaDRM API has been marked as
Obsolete
and will be removed in a future release. MLWebView.GetScrollSize()
andMLWebView.GetScrollOffset()
have been marked asObsolete
and will be removed in a future release.- Removed the ability to turn off near clipping plane enforcement in
MagicLeapCamera
.
Known Issues
MLWebRTC
: When disconnecting from a session, the camera does not shut down cleanly if the NativeSurface buffer format was used, causing the application to hang for as much as 30 seconds.
1.6.1
Known Issues
MLWebRTC
: When disconnecting from a session, the camera does not shut down cleanly if the NativeSurface buffer format was used, causing the application to hang for as much as 30 seconds.MLAnchors
API returns the same anchor poses after a headpose reset
Deprecations & Removals
- Removed the ability to turn off near clipping plane enforcement in
MagicLeapCamera
.
1.6.0
Features
- Added
MLNotifications
API to suppress default notifications in medical SKUs. - Added support for handling and selecting multiple language tracks for subtitles.
MLWebView
: added open and close callbacks for popup tabs.
Bugfixes
- Fixed the controller ray not following the totem right after starting Unity app.
- Fixed broken link in README (#8)
- Fixed issue with
MLMediaPlayerBehavior
where callingStopMLMediaPlayer()
would make videos unplayable. - Fixed camera errors after the device enters sleep mode.
- Fixed issue with
MLMarkerTracker
not working after device enters sleep mode - Fixed issue with creating spatial anchors with an expiration value of
0
causing errors. - Fixed issue where meshing system would render excess data when returning to the application if head tracking was reset in another application.
Known Issues
MLWebRTC
: When disconnecting from a session, the camera does not shut down cleanly if the NativeSurface buffer format was used, causing the application to hang for as much as 30 seconds.
1.5.0
Features
- Added support for
XRHandSubsystem
- Added slots to
MLVoiceIntents
- Update Magic Leap XR Plugin requirement to version
7.0.0
- Added option to recenter the
XROrigin
component atStart()
via the inspector inside theMagicLeapCamera
component.
Bugfixes
- Fixed enforcement of Main Camera's near clip distance to respect user setting.
- Fixed a NullReferenceException being thrown when stopping and replaying video with
MLMediaPlayer
- Fixed invalid handle check with
MLMeshing
subsystem
Known Issues
MLWebRTC
: When disconnecting from a session, the camera does not shut down cleanly if the NativeSurface buffer format was used, causing the application to hang for as much as 30 seconds.
1.4.0
Features
- Added
MLNativeBindings.MLUnitySdkGetMinApiLevel()
method which reports the minimum Magic Leap API level supported by the package. - Added new
MLCameraBase
class to theMLCamera
API which can be used to make camera API calls synchronously. - Added suite of automated API marshalling tests in Test Runner.
- Added new public
OnReceivedSamples
callback to theMLAudioInput
API. - Added new capability to
MLSegmentedDimmer
to enable using the camera's depth buffer to automatically apply segmented dimming to 3D meshes in a scene, instead of using URP. This feature will require an upcoming update to thecom.unity.xr.magicleap
package. - Added
WinkLeft
andWinkRight
values to theMLGazeRecognition.Behavior
enum. - Added
Reset()
method to theMLMediaPlayerBehavior
script. - Added
Controller.State
struct to the Input subsystem get state info of the controller, such as handedness. UseInputSubsystem.Extensions.Controller.GetState()
to query the current state. - Added
MagicLeapCamera.recenterXROriginAtStart
boolean to determine if the app should recenter the XROrigin object so that the Main Camera is at the scene's origin on start. This is set totrue
by default but can be toggled off within the inspector.
Bugfixes
- Fixed bug where
MLMarkerTracker
would not shut down cleanly, causing a "PerceptionSystemNotStarted" error to fill the log output. - Fixed a low reproducible bug where the app would crash when consistently pausing and unpausing a scene by making the Pause/Resume methods synchronous in MLCamera
Known Issues
MLWebRTC
: When disconnecting from a session, the camera does not shut down cleanly if the NativeSurface buffer format was used, causing the application to hang for as much as 30 seconds.
Deprecations & Removals
- Several
MLSegmentedDimmer
properties which had previously been deprecated have now been removed. MLSegmentedDimmer.SetEnabled()
has been markedObsolete
and will be removed in a future release.
1.3.0
Features
- Added
MLDepthCamera
andMLWorldCamera
APIs
Bugfixes
- Fixed null reference exception in Meshing subsystem which was causing applications to crash.
Known Issues
- Quitting a scene while using
MLMediaPlayer
will cause a timeout error to be logged.
1.2.0
Features
- Added
GetData
method toAudioInputBufferClip
that does not automatically wrap the audio data and instead sends you exactly what is in the audio buffer. - Added
MLCamera.FlipCameraVertically
method to allow easily flipping camera frames instead of needing to invert Unity Renderer. - Added Pause and Resume capability to
MLWebView
- Added new result code
MLResult.Code.IllegalState
- Added new struct
MLMarkerTracker.TrackerSettings
that introduces tracker profiles toMLMarkerTracker
as a more modular way to configure the marker tracker hints. MLMarkerTracker.MarkerData
objects now have their pose correctly rotated before being given to the developer.- Exposed a callback
MeshingSubsystem.Extensions.MLMeshing.Config.OnMeshBlockRequests
that provides the mesh block info to allow for setting LOD overrides on a per mesh block basis. The callback is set withMeshingSubsystem.Extensions.MLMeshing.Config.SetCustomMeshBlockRequests(...)
orMeshingSubsystemComponent.SetCustomMeshBlockRequests(...)
- Exposed system intents in
MLVoiceIntentsConfiguration
. This is curretly an experimental feature on the OS. - Exposed funcs in
MLAudioOutput
to allow bypassing device's master volume. These functions will only work on 60601 compliant devices.
Bugfixes
MagicLeapHandDevice
is no longer derived fromXRController
- Fixed AccessRenderBufferTexture bug in
MLWebRTCVideoSinkBehavior
which occasionally prevented frame from rendering correctly. - Fixed UnspecifiedFailure in
MLMarkerTracker
API caused by change inMLMarkerTrackerSettings
structure. - Fixed bug in
MLMediaPlayer
whereReset()
was being incorrectly called in place ofStop()
. - Fixed
MLMediaPlayer
blocking main thread withReset()
andDestroy()
methods. These now execute on a separate detatched thread. - Fixed a crash in
MLMediaPlayer
when switching scenes. - Fixed bug in MRCamera RGBA image format rendering.
Deprecations & Removals
MeshingSubsystemComponent.LevelOfDetail
,MeshingSubsystemComponent.LevelOfDetailToDensity()
, andMeshingSubsystemComponent.LevelOfDetailToDensity()
have been markedObsolete
and will be removed in a future release in favor ofMeshingSubsystem.Extensions.MLMeshing.LevelOfDetail
,MeshingSubsystemComponent.FromDensityToLevelOfDetail()
, andMeshingSubsystemComponent.FromLevelOfDetailToDensity()
Known Issues / Limitations
- Hand Center and Interaction Point are not valid in the Gesture Classification API.
1.1.0
Features
- Unity Magic Leap XR Plugin dependency updated to 7.0.0-pre.1
- Using Segmented Dimmer now requires an explicit
MLSegmentedDimmer.Activate()
call in order to request the Graphics API provide AlphaBlend frames. - Per-frame intrinsics via for Mixed Reality Configured MLWebRTC/MLCamera are now available.
- Controller 6dof state filtering is now available.
- Unity XRI haptics now supported.
SettingsIntentsLauncher
can be used to open certain Android Settings views directly from Unity.- Added new
MLMediaPlayer
OnVideoRendererInitialized
callback for when video renderer is fully initialized - Added
GetData
function toAudioInputBufferClip
that does not automatically wrap the audio data and instead sends you exactly what is in the audio buffer.
Bugfixes
- Fixed bug in WebRTC where toggling local video off and then back on during a connected session did not work.
- Fixed bug in WebRTC which prevented a session from persisting between scene changes.
- Fixed bug in WebRTC where Mixed Reality capture showed a transparent vertical bar on the side of the image.
- Fixed
MLSegmentedDimmer
behavior where disabling dimmers using theIsEnabled
property did not work as expected. The property has been markedObsolete
and replaced with aSetEnabled()
method which turns on and off the MeshRenderers for objects on your Segmented Dimmer layer. - Fixed issue with WebView's first tab loading before service is connected.
- Fixed Meshing Subsystem using invalid handles if device headpose gets reset
- Corrected some
MLCamera
event delegates being incorrectly defined. - Fixed issue in WebView where adding too many tabs caused them to begin rendering outside of UI bounds.
MagicLEapHandDevice
is no longer derived fromXRController
Deprecations & Removals
- Numerous MLSegmentedDimmer API properties have been marked
Obsolete
as they are non-functional and will be removed in a future release.
1.0.0
Features
- Added controller pose derivative values to Unity Input system.
- Added ability to save Magic Leap diagnostic logs from within Unity.
- Updated license agreements and copyright headers.
- Added Anchors space origin transform.
- Added MLAudioInput support for streaming audio clips.
- Updated WebRTC API struct format and improved memory management.
- Added new
Auto Resize Native Renderer
option toMLWebRTCVideoSinkBehavior
which if enabled will allow the Native Renderer to automatically be adjusted in response to changes in WebRTC stream size. - Added ability for developers to override
VkSamplerYcbcrConversionCreateInfo
struct.
Bugfixes
- Fixed resource leak in WebViewTabBehavior leaving web view tabs open after changing scenes.
- Fixed cleanup of YcbcrRenderer when MediaPlayer is reset.
- Fixed MLAudioInput capture delay.
- Fixed use of TryGetBestFitStreamCapability.
- Fixed multiple warnings due to unused variables.
- Fixed errors with MLCamera asynchronous APIs by adding locking mechanisms.
- Fixed performance issues with executing LabDriver to get relative paths for Magic Leap App Sim.
- Fixed cleanup of callback handlers on video player teardown.
- Fixed RenderTexture read-write settings and YcbcrRenderer output color space determination.
- Fixed MLWebView link click precision issues.
Deprecations & Removals
- Removed WorldScale support. This was causing issues with transforms coming from the Magic Leap SDK and was not uniformally applied. Recommended to use custom scaling of objects instead of camera parent scale.
- Removed APIs for deprecated features (Hand Meshing, Raycast, Image Tracking)
- Removed deprecated Planes setting Max Hole Size.
Known Issues / Limitations
- Eye blinking state is not reported either by the eye tracking API or the gaze recognition API (awaiting platform support).
- WebRTC LocalAppDefinedAudioSourceBehavior is restricted to 1 audio channel.
- To use Geometry Shaders, Force Multipass must be set in Project Settings -> XR Plug-in Management -> Magic Leap Settings -> Force Multipass. Otherwise geometry shader passes cause vulkan exception in Unity player.
- Keypoint mask values in ML App Sim are temporarily ignored and overridden to true.
- XR Framework Meshing subsystem crashes when attempting to load mesh blocks for rendering.
- Detecting simultaneous controller input buttons does not work in Unity Input System 1.2.
- Marker tracker transforms are upside down requiring users to rotate them by 180 degrees about the forward vector.
- Camera capture can freeze app after multiple captures.
- MLCamera.CaptureVideoStop fails with UnspecifiedFailure when called by WebRTC CameraVideoSource using NativeBuffers. When using YUV CaptureVideoStop returns successfully.
- Some configurations of camera capture can produce distorted images.
- WebRTC video sink rendering fails when non-white material is assigned.
- MLGestureClassification's GestureTransformRotation and GestureInteractionRotation are not implemented yet and data will not be guaranteed accurate. Currently only the Positions of the Hand Transform and Interaction Point will be recommended to use.
- MLWebView first tab creation causes framerate drop.
- If HandTracking is enabled, the Controller position/rotation actions fail to work properly when binding with the generic XRController and Right XRController input devices. The work around is to have your actions bind to the MagicLeapController input device instead. The MagicLeapInputs input asset already does this with it's action fallbacks.
- MLAudio is not fully supported in the 2022.2.0b8 version of the Unity Engine, make sure you don't check the "MLAudio" check box in Magic Leap XR settings (to utilize the Java AudioTrack fallback). Also use the following audio settings: Sample rate to 48000, buffer size to Good Latency.
- When changing audio settings Unity crashes often or starts making noises.
- Unity applications currently experience aproximately 19 MB/hr - 190 MB/hr memeory leak (varies by app). This appears to be true for all Android based Unity applications.
- WebRTC session can not be reconnected to if user navigates to another scene during an active session.
0.26.0
New Features
- New "Magic Leap → Zero Iteration" menu that contains functionality that was previously contained in the Magic Leap XR Plugin.
- Note that the "Magic Leap → ML Remote" menu from the Magic Leap XR Plugin will be deprecated in a future release
- Exposed APIs to optionally set/get the Ids for WebRTC media tracks. Ids can be specified when creating the tracks and the
MLWebRTC.MediaStream.Track.Id
property is already set upon receiving a track from the remote peer. - Exposed callbacks in
MLWebRTC.AudioSink
to provide the app with the incoming audio buffers. Pass in the appropriateBufferNotifyMode
toMLWebRTC.AudioSink.Create()
to set whether the app will receive the audio buffers or not and whether the underlying WebRTC platform will play the audio or leave it to the app to do so. - Exposed functions in
MLWebRTC.AudioSink
to set various soundfield parameters (position, orientation, direct send levels, room send levels, distance & radiation properties and sound volume). These properties should only be set afterMLWebRTC.AudioSink.CurrentServiceStatus
isServiceStatus.Started
orMLWebRTC.AudioSink.OnAudioServiceStatusChanged
delegate is fired withServiceStatus.Started
. - Updated
MLWebRTCAudioSinkBehavior
to playback the received audio via Unity if the "Sink Buffer Notify Mode" is set to "Notify Only" and anAudioSource
component reference has been provided. This, combined with a spatialization plugin, can be used to achieve much more granular control over the spatialization than currently offered via the soundfield parameters in theMLWebRTC.AudioSink
class.
Updates
- Added extensions for
MLPlanes.QueryFlags
enum. You can now check which flags are set by calling convenience functions likeIsCeiling()
,IsFloor()
etc to check which planes the flag represents. - Image capture now uses memory from a circular buffer to avoid over-allocations in case of multiple capture requests.
- Added
OnTrackAddedMultipleStreams
&OnTrackRemovedMultipleStreams
delegates to theMLWebRTC.PeerConnection
class. These delegates are similar to the oldOnTrackAdded
&OnTrackRemoved
delegates but report a full list of streams that added/removed track belongs to. - Upgraded Magic Leap XR Plugin support to 6.2.2.
- Clarified the usage of
MLEyes.Timestamp
property that it won't automatically initialize the eye tracking api and returns 0 in that case. - Added ability to change MTU size in MLBluetoothLE.
Bug Fixes
- Fixed a crash in MLWebRTC when the remote peer does not provide a stream ID for its media tracks. Use a default stream ID of "unknown_remote" in such cases.
- Fixed the string returned from the scanned QR-code. The string had a null-terminator in the end.
- Fixed MLWebRTCVideoSinkBehavior to scale the game object according to dyamic changes in video resolution.
- Fixed errors thrown by pending MLPlanes queries when a new scene is loaded before they're completed.
- Fixed an error in MLPlanes where polygons were always requested, regardless of the provided query flags.
- Fixed the OnBluetoothGattRemoteCharacteristicChanged callback in MLBluetoothLE.
- Fixed the OnBluetoothCharacteristicRead callback in MLBluetoothLE.
Deprecations & Removals
OnTrackAdded
&OnTrackRemoved
delegates in theMLWebRTC.PeerConnection
class have been deprecated in favor ofOnTrackAddedMultipleStreams
&OnTrackRemovedMultipleStreams
delegates.
Known Issues
- When playing WebRTC audio via Unity, while the playback is expected to be smooth, the audio buffers play at a much larger latency than when played directly via the underlying WebRTC platform if the sample rate of the incoming audio stream does not match that of Unity (48000 Hz).