Sudden Loss of Body Tracking & Crashes with Unity Movement SDK (Quest 3) since version 2.3 update
Hi everyone, I am experiencing a critical issue with the Unity Movement SDK on the Meta Quest 3, and I've noticed a few other developers mentioning the exact same problem recently. My project relies heavily on the Movement SDK, and it was working perfectly fine up until recently (around April 29th/30th). Suddenly, body tracking has completely stopped working. Here are the specific symptoms and the troubleshooting steps I've already taken: Persistent Crashes: The project now crashes consistently when hitting Play in the Unity Editor. It also crashes when I build and run it directly on the Quest 3. Older Builds Failing: I initially thought I broke something during a project update, but when I tested older, previously stable builds that had perfectly working body tracking, they also failed. My Setup: Device: Meta Quest 3 (Version 2.3.1034) Software: Meta Horizon Link (Version 201.0.0.73.547) Because older, untouched builds are now failing, this strongly suggests a bug or breaking change introduced in a recent Meta Horizon Link or Quest OS update rather than an issue within Unity itself. Is this a known issue currently being looked into by the Meta team? If anyone has found a temporary fix or workaround, please let me know. Any help is appreciated. Many thanks!!Meta Quest AI Stack: What It Actually Means for Unity Developers
Hey everyone, Degly here! I’ve been working with the Meta Quest AI stack for a while now, and I wanted to share a straightforward overview of the real value for Unity developers. There’s a lot of excitement around AI tools in Quest development, but it can be hard to understand how they fit into your workflow. Meta Quest AI Stack: What It Actually Means for Unity Developers AI tooling is showing up everywhere in Quest and Unity development, but a lot of it gets explained in a way that sounds exciting without being very useful. This video is a plain-language overview of the current Meta Quest AI development stack. The goal is not to show a deep coding walkthrough or claim that AI will build your whole app. The goal is simpler: How can these tools reduce friction, speed up iteration, and help Quest developers move through setup, debugging, content changes, and handoff more efficiently? Video / resource link: WHO THIS IS FOR Unity developers building for Meta Quest. XR developers who keep hearing about AI tooling but do not know where to start. Developers who want faster iteration, not AI hype. Anyone who wants a practical mental model before trying MQDH MCP, Unity MCP, AI Building Blocks, or the Immersive Debugger. PRACTICAL TAKEAWAYS A simple explanation of the Quest + Unity AI stack: What MCP means in practical developer terms What MQDH MCP does What the Meta XR Unity MCP Extension is for What AI Building Blocks are Why Agents and Providers matter Where Unity Inference Engine fits Why the Immersive Debugger matters for headset-first debugging The main takeaway: this stack is not one magic tool. It is a practical workflow for reducing friction across the development loop. THE STACK AT A GLANCE The video focuses on four core pieces: MQDH MCP Unity MCP Extension AI Building Blocks Immersive Debugger High-level workflow: MQDH MCP helps you gather Quest development context. Unity MCP Extension helps automate repeated Unity editor tasks. AI Building Blocks help you add practical AI features. Immersive Debugger helps you inspect and validate behavior inside the headset. RELATED LINKS Meta Quest Developer Hub overview: Enable AI tools with MCP for Meta Horizon OS developers: Model Context Protocol introduction: Meta XR Unity MCP Extension docs: Meta XR Unity MCP Extension GitHub repo: AI Building Blocks overview: Agents and Building Blocks: Providers and Inference Types: Unity Inference Engine: Immersive Debugger overview: MR Utility Kit debug and testing: Dilmer Valecillos walkthrough: Meta Quest agentic tools GitHub repo: WHAT TO INCLUDE WHEN ASKING FOR HELP If you try one of these workflows and need help, include: Which part of the stack you are testing Unity version Meta XR SDK version Quest device model Whether the headset is connected and in developer mode Screenshot of the issue Relevant logs or error messages Whether the issue happens in Editor, on device, or both FAQ Should I use all of these tools at once? No. Start with the part that solves the problem you currently have. Is this a replacement for learning Quest development? No. It is a way to reduce friction around the workflow. Is MQDH MCP the same thing as Unity MCP Extension? No. MQDH MCP is more about external Quest context such as docs, logs, screenshots, and device workflows. Unity MCP Extension is more about repeated Unity editor tasks. Are AI Building Blocks only for cloud AI? No. The Agent and Provider model is useful because Providers can represent different inference paths, including cloud, local, or on-device options depending on the feature. Is Immersive Debugger an AI tool? No. It is a runtime debugging tool used inside the headset. It is included here because it helps complete the development loop. BOTTOM LINE This stack is not about AI for the sake of saying AI. It is about tools that help Quest and Unity developers: Move faster Test easier Debug more clearly Keep projects cleaner Reduce repeated setup work Validate behavior inside the headset The practical story is simple: use AI tooling where it reduces friction, and use headset-first debugging where the real XR behavior actually happens. Degly
31Views0likes0Comments[Unity] OVROverlay External Surface: ExoPlayer disconnect from the surface internally.
So I am working with OVROverlay and I have been able to attach ExoPlayer video feed on to OVROverlay surface. now here is the problem when trying to toggle OVROverlay's shape in realtime: overlay.enabled = false; overlay.currentOverlayShape = (overlay.currentOverlayShape == OVROverlay.OverlayShape.Quad) ? OVROverlay.OverlayShape.Cylinder : OVROverlay.OverlayShape.Quad; overlay.enabled = true; Without toggling overlay enabled state, the UI doesn't update at all. This isn't a problem with Unity's VideoPlayer with RenderTexture. RenderTexture can even apply custom shader on per frame in real time while toggling shape. But with ExoPlayer, I get such error: 2026-05-13 17:08:36.139 27844 28234 Error Surface queueBuffer: error queuing buffer, -19 2026-05-13 17:08:36.139 27844 28234 Error ACodec queueBuffer failed in onOutputBufferDrained: -19 2026-05-13 17:08:36.139 27844 28234 Error ACodec signalError(omxError 0x80001001, internalError -19) 2026-05-13 17:08:36.139 27844 28233 Error MediaCodec Codec reported err 0xffffffed/NO_INIT, actionCode 0, while in state 6/STARTED 2026-05-13 17:08:36.139 27844 28233 Debug MediaCodec flushMediametrics 2026-05-13 17:08:36.139 27844 28233 Debug MediaCodec updateMediametrics(0xb40000758bcd2000) ttff: 502ms, ttff_os: 31680455ms, init: 163ms ,configure: 7ms, start: 46ms, decode: 31680239ms, rendering: 227ms 2026-05-13 17:08:36.140 27844 28233 Debug SurfaceUtils disconnecting from surface 0xb40000758bcef010, reason disconnectFromSurface 2026-05-13 17:08:36.140 27844 28233 Error Surface freeAllBuffers: 8 buffers were freed while being dequeued! 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal Playback error 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal androidx.media3.exoplayer.ExoPlaybackException: MediaCodecVideoRenderer error, index=0, format=Format(1, null, video/mp4, video/avc, avc1.640020, 2246746, und, [1920, 540, 23.976025, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false, 8bit Luma, 8bit Chroma)], [-1, -1]), format_supported=YES 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.BaseRenderer.createRendererException(BaseRenderer.java:558) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:982) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.render(MediaCodecVideoRenderer.java:1431) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.RendererHolder.render(RendererHolder.java:392) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1388) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:711) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at android.os.Handler.dispatchMessage(Handler.java:102) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at android.os.Looper.loopOnce(Looper.java:218) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at android.os.Looper.loop(Looper.java:310) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at android.os.HandlerThread.run(HandlerThread.java:67) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal Caused by: androidx.media3.exoplayer.video.MediaCodecVideoDecoderException: Decoder failed: OMX.qcom.video.decoder.avc 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.createDecoderException(MediaCodecVideoRenderer.java:2665) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:976) 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal ... 8 more 2026-05-13 17:08:36.157 27844 28226 Error ExoPlayerImplInternal Caused by: android.media.MediaCodec$CodecException: Error 0xffffffed 2026-05-13 17:08:36.157 27844 28226 Info Surface Surface::setFrameRate is deprecated, setFrameRate hint is dropped as destination is not SurfaceFlinger 2026-05-13 17:08:36.157 27844 28233 Error MediaCodec flush() is valid only at Executing states; currently at Released state 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal Disable failed. 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal java.lang.IllegalStateException: flush() is valid only at Executing states; currently at Released state 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at android.media.MediaCodec.native_flush(Native Method) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at android.media.MediaCodec.flush(MediaCodec.java:2504) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.mediacodec.AsynchronousMediaCodecAdapter.flush(AsynchronousMediaCodecAdapter.java:278) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushCodec(MediaCodecRenderer.java:1077) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReleaseCodec(MediaCodecRenderer.java:1020) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onDisabled(MediaCodecRenderer.java:833) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onDisabled(MediaCodecVideoRenderer.java:1196) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.BaseRenderer.disable(BaseRenderer.java:253) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.RendererHolder.disableRenderer(RendererHolder.java:674) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.RendererHolder.disable(RendererHolder.java:568) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:2253) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.ExoPlayerImplInternal.disableRenderers(ExoPlayerImplInternal.java:2246) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:1979) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:1933) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:890) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at android.os.Handler.dispatchMessage(Handler.java:102) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at android.os.Looper.loopOnce(Looper.java:218) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at android.os.Looper.loop(Looper.java:310) 2026-05-13 17:08:36.160 27844 28226 Error ExoPlayerImplInternal at android.os.HandlerThread.run(HandlerThread.java:67) 2026-05-13 17:08:36.167 27844 28222 Info System.out Player error: MediaCodecVideoRenderer error, index=0, format=Format(1, null, video/mp4, video/avc, avc1.640020, 2246746, und, [1920, 540, 23.976025, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false, 8bit Luma, 8bit Chroma)], [-1, -1]), format_supported=YES | errorCode: 4003 2026-05-13 17:08:36.177 27844 28234 Error Surface getSlotFromBufferLocked: unknown buffer: 0xb40000758ba7da20 I have discussed this with different LLMs, and one recommend to set video surface to null in Android side (which didn't work at all) Another recommendation was to release Exoplayer completely before disabling OVROverlay and then playing again after enabling OVROverlay (This is even worse user experience so I didn't bother to test it out). So is there a way to handle this case? Also while I am at it, let me know if I can add a shader like I do with VideoPlayer: Graphics.Blit(sourceRT, processedRT, mat); Thank you.Solved28Views0likes1CommentResetting quest floor level on HMDMounted
I am developing an AR application with Unity using the Meta SDK v83 Every time I take of the headset the floor level just shoots up or down when I put it back on. To fix it either I have to: Restart the app Go to settings >> Environment Setup >> Boundary >> Set floor level (sets it back to the correct height without my input) But that is not very user friendly. I'd like to have the quest recalculate floor level automatically when one of these events is fired: OVRManager.HMDMounted OVRManager.TrackingAcquired There does not seem to be a straightforward way to do exactly what set floor level does in settings.6Views0likes0CommentsProblem with SharedSpace and Colocation
I'm currently working on a mixed reality project, the idea is to allow two players who are physically in the same real world space to place objects around the room. Right now I'm working on the multiplayer part of the project. I used a custom script instead of the Building Blocks to connect both users using Photon Fusion and create a room with a code. The problem is that, during testing, the players do not see objects in the same positions. The objects move correctly, but they appear in different locations for each user. To fix this, I started looking into Space Sharing and Colocation so I can ensure both users share the same room alignment and anchors. I started implementing it, but I ran into another problem: I don't seem to be able to test it properly, is the only way to test this with two physical devices? Currently, I'm trying to test using one device and the Unity Editor with XR Simulator. When testing, I can see all the debug logs on the device build. When using the XR Simulator, it does not finish the process of creating the anchor IDs, and if it is running as the client, it never finishes retrieving the anchors either, in both cases, it only shows: "Starts the process..." (<- my debug log) For the Building Blocks, I'm using Passthrough, Shared Spatial Anchor Core, NetworkManager, Platform Init, and Effect Mesh to verify whether both users are sharing the same room.56Views0likes3CommentsUnity Quest app works on Quest 2 but not on Quest 3
As the title indicates, after recent updates my app still works fine on Quest 2, but not on Quest 3. Earlier both were working fine. The problem is related to pressing the trigger button on the controller. This is not recognised anymore. It may be related to a (very 😁) old third party package that I am using. I initially developed my app for the HTC Vive and this package is called Vive Input Utility. It has always worked on the Quest, and still does on my Quest 2. On the Quest 3 I can see the models of the Vive controllers instead of the Quest controller, that's why I think there is a relation. I know I'll need to bite the bullet one day and replace it with the OVR Interaction Rig, but that requires updating Unity canvasses, Event Modules and button presses in scripts so a fairly big redesign. And since my app still works on the Quest2, I don't feel that this package is the problem right now. I wonder if there is a relation with the major updates recently of the Meta home environment's UI, although that UI update is also installed on my Quest 2. Here's the software versions. Quest 2: V2.1.1034, build 5210688.5260.150 installed 29 April Quest 3: V2.3.1034, build 5208318.3200.520 installed 1 May For my Quest 2 there is a pending upgrade to 2.3.1034, build 5215047.3460.150, but I am hesitant to install that as it might also break the app on the Quest 2. So as long as I have this version I can at least test the two different behaviours. So I hope someone can clarify what's happening. Thanks!54Views0likes2CommentsPuzzleDeck: Spatial MR Puzzles with Full-Scale Reveals
I’ve been building a mixed reality puzzle experience for Meta Quest 3/3s and just got it live on the Store. Would love some testers and honest feedback. I’m part of a super small team of three that loves building immersive experiences and mapping digital content to the physical world. It’s called PuzzleDeck. You load different puzzle kits and after each one is complete you unlock something that’s only possible in XR. Build a Great White Shark and see what 6 metres looks like standing in your living room. The reveal was one thing I felt was missing from puzzle building and could be really interesting in XR. I also wanted to build something that my kids would have fun with too. The Ocean Giants Puzzle Kit (Shark, Whale, Orca) is the free launch collection. Would genuinely love feedback on pretty much anything and everything. https://www.meta.com/experiences/puzzle-deck/27000539009540439/18Views0likes0CommentsIs it possible to create an Overlay like OVR Metrics Tool?
As the title suggests, I was wondering if it's potentially possible with creating an overlay like OVR Metrics Tool, as I am wanting to create an application like XSOverlay for Quest devices that are running standalone applications.185Views0likes10CommentsThe request of specific API documents for the MetaMovementSDK_Utility
Hi, There are only samples but no specific API documents or source code for the MetaMovementSDK_Utility, so I don't know what's the correct order to combine the different APIs to generate the interpolated poses from the local side, or whether it's possible from the host object(local side). From SerializeSkeletonAndFace(...), I can only guess or estimate that metaMovementSDK_createSnapshot, metaMovementSDK_snapshotBody and metaMovementSDK_snapshotFace may be used to achieve the desired functionality. It'd very helpful if you could offer the API documents of MetaMovementSDK_Utility. Regards H.G.18Views0likes0CommentsLatest Q3 Headset Software Update Crashing Unity Play Mode w/ Meta Link Active
Hello, a few of our developers have encountered an issue where after receiving the latest Q3 headset software update we now receive immediate Unity crashes when entering play mode with link enabled. Has anyone else encountered this? Started with headset update to software: v2.3.1034 - Build 5208318.3200.520 We are on Unity 6000.2.9f1. Meta XR SDK 78.0.0Solved316Views2likes6Comments