Retention in Social VR: Why Most Indie VR Games Struggle (And How to Fix It)
So, you built your game. It is FUN. You drive players daily. But most do not come back? When we, indie VR developers, talk about growth, we usually talk about: TikTok / YouTube Store visibility Influencers Launch day spikes But here’s the uncomfortable truth: | Growth without retention is just expensive churn. I had the same issue...And over time, I realized something important: Retention in Social VR is not a metric. It is a campfire. Retention is a Campfire 🔥 Think about a campfire. People gather around it because: It is warm It is safe It is alive It gives them a reason to stay If you stop feeding it, it dies. If there is no structure around it, it spreads and burns out. If it’s too small, nobody gathers. Retention works the same way. Social VR Is Not Just a Game — It’s a Place In traditional games, players chase wins. In social VR, players chase: Belonging Visibility Identity Status They are not looking for “levels.”-They are looking for warmth. Retention in VR is driven by social capital, not just progression. The Retention Triangle (How You Feed the Fire) Over time, I simplified retention into three pillars, which are the logs you place into the fire. 1️⃣ Direction (Quests & Challenges) When a player logs in, they should immediately know: “What do I do next?” If your spawn area says nothing…The fire weakens. Direction means: Clear daily goals Short-term progress Visible next steps Daily challenges are not “gamification.” They are fuel. Without small logs, the fire fades. 2️⃣ Identity (Badges & Visibility) Badges should not track progress. They should broadcast who the player is. In social VR: Cosmetic visibility > invisible XP Titles > hidden levels Social proof > private stats When players can show who they are, they protect their place in the circle. Identity makes the fire meaningful. Without identity, it’s just heat. 3️⃣ Rhythm (Live Ops & Weekly Anchors) Retention dies when time feels flat. A strong campfire needs regular fuel. Strong social VR games create rhythm: Daily resets Weekly rotations Limited-time cosmetics Community events Rhythm keeps the fire alive. A game without rhythm feels abandoned — even if it isn’t. The Stone Circle (Systems & Moderation) A campfire without stones spreads. A community without structure collapses. One of the biggest mistakes indie VR developers make: Moderators added too late Events built too late Systems implemented after chaos Unmoderated growth = chaos. Chaos = churn. Systems protect retention. The Social Layer Multiplier Here is where it gets powerful. When players see: Creator tags Event hosts Ranked titles Rare cosmetic holders They don’t just play. They aspire to sit closer to the fire. Aspiration strengthens the circle. And that is when retention becomes natural. What I Changed in My Own Game In my own social VR game, I realized: | Fun mechanics were not enough. So I focused on strengthening the fire: Visible daily challenge boards Public tech tree branches Social nameplate titles Weekly mode rotations Creator spotlight systems Not more content, but more fuel. Retention Is a Design Philosophy You don’t fix retention with a patch. You design your world like a place people want to gather around. You build: Direction Identity Rhythm When those three align, players don’t just visit your game. They sit down. They stay. They return. Final Thought When a player logs out today… Does your campfire still feel warm? Or does it go dark? If the answer is not obvious, your retention system isn’t strong enough yet. — Tevfik Ufuk Demirbaş VR Entrepreneur & Developer & Start Mentor40Views0likes2CommentsMeta XR Standalone Simulator V83.2 crash immediately on running the game in unity
Meta XR Standalone Simulator V83.2 crash immediately on running the game in unity I am using Unity 6.3 LTS , Meta All-In-One SDK v83, using URP and Ghraphics API D3D11 full log from simulator app: [com.meta.xrsim.grpcconnectionfeeder]: Handling connection request with URI: [ :: 1]:56959 [com.meta.xrsim.openxrplatform]: Starting logging for device: [: :1]:56959 [com.meta.xrsim. openxrplatform]: Successfully started logging for device: [ :: 1]:56959 [meta.xrsim. logger_factory]: Started message streaming for device: [ :: 1]:56959 [arvr. simulation.xrsim]: XrSynch received changed state no session, asked to terminate: yes [com.meta.xrsim.openxrplatform]: Device 12281027643599708862 notified about disconnected state. (XrInstance destroyed) Scheduled terminaiton. [arvr. simulation.xrsim]: XrSynch received changed state no session, asked to terminate: yes [com.meta.xrsim.openxrplatform]: Device 12281027643599708862 notified about disconnected state. (XrInstance destroyed) Scheduled terminaiton. [arvr. simulation. openxr.xrsyn]: XrStateReactor :: OnDone: Cancelled on the server side [arvr. simulation. openxr.xrsyn]: Client synchronization was interrupted; client may have disconnected. Cancelled on the server side [meta.xrsim. logger_factory]: Message streaming canceled for device: [ :: 1]:56959 [com.meta.xrsim.openxrplatform]: There are no more active connections. Nothing to show. [com.meta.xrsim.openxrplatform]: Device 12281027643599708862 is terminated in platform. [arvr. simulation. openxr. compositor_readback]: Client disconnected during swapchain enumeration (this happens when no XrSession was created for XrInstance): GOAWAY received [arvr. simulation. openxr. compositor_readback]: Failed to enumerate swapchains. Client may have disconnected. [com.meta.xrsim.openxrplatform]: Device 12281027643599708862 notified about disconnected state. (XrInstance destroyed) Scheduled terminaiton. [com.meta.xrsim.grpcconnectionfeeder]: Handling connection request with URI: [ :: 1]:56966 [com.meta.xrsim. openxrplatform]: Starting logging for device: [: :1]:56966 [com.meta.xrsim. openxrplatform]: Successfully started logging for device: [ :: 1]:56966 [meta.xrsim. logger_factory]: Started message streaming for device: [ :: 1]:56966 [arvr. simulation.xrsim]: XrSynch received changed state XR_SESSION_STATE_IDLE, asked to terminate: no [arvr. simulation. xrsim]: XrSynch received changed state XR_SESSION_STATE_READY, asked to terminate: no [arvr. simulation. openxr. compositor_readback]: Client disconnected during swapchain enumeration (this happens when no XrSession was created for XrInstance): Handle canno [arvr. simulation. openxr. compositor_readback]: Failed to enumerate swapchains. Client may have disconnected. [com.meta.xrsim.openxrplatform]: Device 12282005109436999216 notified about disconnected state. (XrInstance destroyed) Scheduled terminaiton. [meta.xrsim. logger_factory]: Message streaming canceled for device: [ :: 1]:56966 [arvr. simulation.xrsim]: XrSynch received changed state XR_SESSION_STATE_SYNCHRONIZED, asked to terminate: no [arvr. simulation.xrsim]: XrSynch received changed state XR_SESSION_STATE_STOPPING, asked to terminate: no [arvr. simulation.xrsim]: XrSynch received changed state XR_SESSION_STATE_IDLE, asked to terminate: no [arvr. simulation.xrsim]: XrSynch received changed state XR_SESSION_STATE_EXITING, asked to terminate: no [arvr. simulation.xrsim]: XrSynch received changed state no session, asked to terminate: no [arvr. simulation.xrsim]: XrSynch received changed state no session, asked to terminate: yes [com.meta.xrsim.openxrplatform]: Device 12282005109436999216 notified about disconnected state. (XrInstance destroyed) Scheduled terminaiton. [arvr. simulation.xrsim]: XrSynch received changed state no session, asked to terminate: yes [com.meta.xrsim.openxrplatform]: Device 12282005109436999216 notified about disconnected state. (XrInstance destroyed) Scheduled terminaiton. [arvr. simulation. openxr.xrsyn]: XrStateReactor :: OnDone: Cancelled on the server side [com.meta.xrsim. openxrplatform]: There are no more active connections. Nothing to show. [com.meta.xrsim.openxrplatform]: Device 12282005109436999216 is terminated in platform. [arvr. simulation. openxr.xrsyn]: Client synchronization was interrupted; client may have disconnected. Cancelled on the server side [arvr. simulation. openxr. compositor_readback]: Using VulkanBundle for device: Device: 000000000 [arvr. simulation. openxr. compositor_readback]: No swapchain images for eye 0 [arvr. simulation. openxr. compositor_readback]: Failed to enumerate swapchains. Client may have disconnected. [com.meta.xrsim.openxrplatform]: Device 12282005109436999216 notified about disconnected state. (XrInstance destroyed) Scheduled terminaiton. ------------------------------------------------------------------------------------------------------ [sim_rpc_xr_sync .cpp:las [General]] Propagating instance exit. .. [sim_rpc_xr_sync.cpp:116 [General]] Cancelling synchronisation. [sim_rpc_xr_sync.cpp:68 [General]] Frontend is disconnected. XrSession synchronization with ipv6: [: :1]:56961 cancelled. Runtime will continue. [sim_rpc_xr_sync.cpp:55 [General]] XrSession synchronization with ipv6: [ :: 1]:56961 finished [sim_rpc_service.cpp:165 [General]] Stopping SimRpc server ... [sim_xrapi_command_hooks.cpp:71 [General]] Command xrHapticParametricGetPropertiesEXTX1 is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrRequestBoundaryVisibilityMETA is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrCreateDynamicObjectTrackerMETA is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrDestroyDynamicObjectTrackerMETA is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrSetDynamicObjectTrackedClassesMETA is not instrumented [sim_xrapi_command_hooks. cpp:71 [General]] Command xrGetSpaceDynamicObjectDataMETA is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrCreateMarkerTrackerAsyncMETAX1 is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrCreateMarkerTrackerCompleteMETAX1 is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrDestroyMarkerTrackerMETAX1 is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrGetSpaceMarkerPayloadMETAX1 is not instrumented [sim_xrapilayer_rendering_d3d11_on_vulkan. cpp:58 [General]] DXGI Adapter NVIDIA GeForce RTX 3080 VMem 10053MB SMem OMB SSMem 8154MB [sim_xrapilayer_rendering_d3d11_on_vulkan. cpp:58 [General]] DXGI Adapter NVIDIA GeForce RTX 3080 VMem 10053MB SMem OMB SSMem 8154MB [sim_xrapilayer_rendering_d3d11_on_vulkan. cpp:58 [General]] DXGI Adapter Microsoft Basic Render Driver VMem OMB SMem OMB SSMem 8154MB [sim_xrapilayer_rendering_d3d11_on_vulkan. cpp:78 [General]] (selected) DXGI Adapter NVIDIA GeForce RTX 3080 VMem 10053MB SMem OMB SSMem 8154MB [XRRP [General]] NO BUFFER DEVICE ADDRESS [XRRP [General]] Device does not support timestamp queries. [sim_xrsession. cpp:35 [General]] Creating XrSession (65767) for XrInstance (65721) (GraphicsApi=D3D11) [sim_xrsession. cpp:194 [Validation]] XrSessionImpl :: switchToSessionState(), session 000001CF6693C680: switch session state from XR_SESSION_STATE_UNKNOWN to XR_SESSION_STATE_IDLE [sim_rpc_xr_sync.cpp:82 [General]] Session state updated to 1, propagating to the frontend ... [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF670B0D80): type(XR_REFERENCE_SPACE_TYPE_VIEW), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_configurationregistry.cpp:260 [General]] saved persistent data to "C:\Users\****\AppData\Roaming\MetaXR\MetaXrSimulator\persistent_data. json" [sim_configurationregistry.cpp:260 [General]] saved persistent data to "C:\Users\****\AppData\Roaming\MetaXR\MetaXrSimulator\persistent_data.json" [sim_window_service. cpp:78 [General]] inserted duplicated window id=session_capture [sim_frontend. cpp:76 [General]] Successfully requested connection. [sim_rpc_xr_sync.cpp:82 [General]] Session state updated to 1, propagating to the frontend ... [sim_xrapilayer_telemetry. cpp:76 [General]] hooking the window function [sim_telemetry_service.cpp:322 [General]] session_id = '5dd1629c-1cf4-4cc5-9109-b08d8f52d360' [sim_window_service. cpp:78 [General]] inserted duplicated window id=plugin [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF670B1F60): type(XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF670B08A0): type(XR_REFERENCE_SPACE_TYPE_VIEW), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF670B0FF0): type(XR_REFERENCE_SPACE_TYPE_LOCAL), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF670B1330): type(XR_REFERENCE_SPACE_TYPE_STAGE), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF670B2AC0): type(XR_REFERENCE_SPACE_TYPE_STAGE), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:69 [Validation]] Space (ActionSpace) created (000001CF670B15A0): subactionPath(/user/hand/left), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:69 [Validation]] Space (ActionSpace) created (000001CF670B1670): subactionPath(/user/hand/right), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF670B2B90): type(XR_REFERENCE_SPACE_TYPE_LOCAL), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF670B2ED0): type(XR_REFERENCE_SPACE_TYPE_VIEW), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF670B2100): type(XR_REFERENCE_SPACE_TYPE_STAGE), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrapi_command_hooks.cpp:71 [General]] Command xrCreateDynamicObjectTrackerMETA is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrDestroyDynamicObjectTrackerMETA is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrSetDynamicObjectTrackedClassesMETA is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrGetSpaceDynamicObjectDataMETA is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrCreateMarkerTrackerAsyncMETAX1 is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrCreateMarkerTrackerCompleteMETAX1 is not instrumented [sim_xrapi_command_hooks.cpp:71 [General]] Command xrDestroyMarkerTrackerMETAX1 is not instrumented [sim_xrapi_command_hooks. cpp:71 [General]] Command xrGetSpaceMarkerPayloadMETAX1 is not instrumented [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CFB9FECA50): type(XR_REFERENCE_SPACE_TYPE_VIEW), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF8FF829A0): type(XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrspace.cpp:48 [Validation]] Space (ReferenceSpace) created (000001CF66831C10): type(XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR), pose({(0.000, 0.000, 0.000, 1.000), (0.000, 0.000, 0.000)}) [sim_xrsession. cpp:194 [Validation]] XrSessionImpl :: switchToSessionState(), session 000001CF6693C680: switch session state from XR_SESSION_STATE_IDLE to XR_SESSION_STATE_READY [sim_rpc_xr_sync.cpp:82 [General]] Session state updated to 2, propagating to the frontend ... [sim_xrapilayer_debug_window_vulkan_offscreen.cpp:39 [General]] XrApiLayerDebugWindowVulkan: :setSession(): completed [sim_vulkan_helpers. cpp:871 [General]] Failed to open target process, will continue, but chances to success are minimal, error code: 00000005 [sim_session_capturer.cpp:493 [General]] Transitioning from state IDLE to IDLE [sim_vulkan_helpers. cpp:877 [General]] Failed to duplicate handle for target process, error code: 0000005712Views0likes1CommentUnity x Meta XR Simulator not working with AMD 9070 XT
Hello everyone, I recently switched from an Nvdia RTX 3070Ti to an AMD RX 9070 XT GPU, and have been unable to get the Meta XR simulator to work since then. When I press the Play button, the unity app tries unsuccessfully to link with the simulator and ultimately exits Play mode. I am developing for Unity 6000.0.62f1 using the v83 version of the standalone simulator. I properly removed Nvidia's drivers using the DDU tool, and I have even created a blank project with building blocks, but this does not work either. Is anyone else experiencing the same issue, or does anyone know what it is? Best,24Views0likes1CommentCannot control the volume of voice calls on v85
Hello team, I am developing an application related to WebRTC, and I need to control the voice call volume on Meta Quest 3 (increase, decrease, or mute completely). Everything was fine at first, but after I updated the OS to v85.0, when I turned the volume down to zero using the physical button, the sound on YouTube was muted, but the voice call audio was still present. I was very surprised that even Facebook Messenger behaves the same way. Is this a bug in the OS, or is it a new OS behavior? I couldn't find any related information in the release notes. Please help me. Thank you very much.6Views0likes0Comments3D Raycast from hands... where is it coming from?
I have a Unity Mixed Reality project... and added the hands and real hands and that's cool. Tossed in a Zombie so I can try to get him to follow me or I can shoot him (finger gun special). Now I want to fixup the ray cast from the hands/controllers so I can interact with game objects from afar... but I'm not even sure where that ray is coming from so I can see the script. My "change" would be to have the ray extend 50m... and return a bunch of "hits" with "target class:" GameObject, yellow [put an explosion effect on that zombie -- if it's hitting the mesh] Interactable, a blue disc appears [press trigger to activate object] something from the 3d depth [depth raycast], an orange disc appears [put bullet hole on that] a scene object [floor/wall], a green [grounded] disc appears (note that that may not be the final terminus -- if there's "more models" outside the window or wall (or maybe you're picking something on the other side of a table).... [code has to see if you can shoot through it] All of course, flat against the object, and usable in code (you might be able to fire a laser through the window, but it won't go through a wall; code will see if that works)... But... I don't know where to look... the ray from the hands does #3... but I don't know where in the Asset Tree it's coming from --it will probably also tell me how to make those discs (is it a Gizmo, or a GameObject?). I figure I can add #1/2 [from the cubes, but I haven't quite figured them out yet either, and #4 [EnvironmentalRayCast [ERC] but I might have to iterate on that one because I don't see a "give me all the hits" from the ERC). Questions: a) Where is this 3d ray coming from in the asset tree so I can learn? b) Is there a good way to "scale" the discs so they're "always ~20px dia" no matter how far away they are? c) It looks like I need to change the shader of my zombie, but I'm not getting the terminology -- it occludes fine (eventually I want the IRL table to occlude it), but I need to say "oh, user picked the bellybutton -- spawn an explosion effect in his gut..." -- and how do you change shaders anyway? I can change materials from the editor, but...?Solved25Views0likes1CommentWhy does an MRUK Room sometimes get loaded at an angle?
I'm working on an AR app in Unity which makes used of the global mesh of the room I'm currently in. It seems that on rare occasions the whole room gets created/loaded at an angle. Not a rotation around the up-axis, but an actual tilt. I can easily detect that this happens, but from there on out I seem to be stuck. From what I can tell there is no API to go "hey, please attempt to reload the rooms again". I guess I could reload the scene, triggering a reload of the MRUK prefab, and see if that fixes things, but that's not ideal. So I guess my question is twofold. Is this a known bug/issue? How can I, when I detect this happens, cause a specific room to get "reloaded"? Unity Version: 6000.0.56f1 Current Meta Packages: 81.0.1 (Although the behaviour dates from well before that)123Views0likes2CommentsPlaymode tests in Azure pipeline crashes because MetaSDK
Hello, Adding Meta SDK makes my pipeline to fail because of a crash. If I run the tests opening Unity in the Agent, they run without any issue If I run the script in my personal PC, it also works This is the line "C:/Program Files/Unity/Hub/Editor/2022.3.71f1/Editor/Unity.exe" -batchmode -runTests -testPlatform PlayMode This is the crash log17Views0likes0CommentsWhere is PassthroughCameraAccess?
Hi, I updated the Meta XR Core SDK and related SDKs from 74 to 83. Then the Meta XR Core SDK package shows a compilation error. It seems to be missing a class or something needed by the MR Utility Kit. Did other required packages increase? Unity 6000.0.55f1 Occulus XR Package 4.5.2 Library\PackageCache\com.meta.xr.sdk.core@a87f85fa91d3\Scripts\BuildingBlocks\AIBlocks\Agents\LlmAgent.cs(66,17): error CS0246: The type or namespace name 'PassthroughCameraAccess' could not be found (are you missing a using directive or an assembly reference?) Library\PackageCache\com.meta.xr.sdk.core@a87f85fa91d3\Scripts\BuildingBlocks\AIBlocks\Agents\ObjectDetectionAgent.cs(51,17): error CS0246: The type or namespace name 'PassthroughCameraAccess' could not be found (are you missing a using directive or an assembly reference?) Library\PackageCache\com.meta.xr.sdk.core@a87f85fa91d3\Scripts\BuildingBlocks\AIBlocks\Agents\ObjectDetectionVisualizer.cs(72,17): error CS0246: The type or namespace name 'PassthroughCameraAccess' could not be found (are you missing a using directive or an assembly reference?) Library\PackageCache\com.meta.xr.sdk.core@a87f85fa91d3\Scripts\BuildingBlocks\AIBlocks\Agents\ObjectDetectionVisualizer.cs(79,20): error CS0246: The type or namespace name 'PassthroughCameraAccess' could not be found (are you missing a using directive or an assembly reference?) Library\PackageCache\com.meta.xr.sdk.core@a87f85fa91d3\Editor\BuildingBlocks\BlockData\PassthroughCameraVisualizer\Scripts\PassthroughCameraVisualizerBlockData.cs(176,13): error CS0246: The type or namespace name 'PassthroughCameraAccess' could not be found (are you missing a using directive or an assembly reference?) Library\PackageCache\com.meta.xr.sdk.core@a87f85fa91d3\Editor\BuildingBlocks\BlockData\PassthroughCameraVisualizer\Scripts\PassthroughCameraVisualizerBlockData.cs(175,35): error CS0246: The type or namespace name 'PassthroughCameraAccess' could not be found (are you missing a using directive or an assembly reference?) Library\PackageCache\com.meta.xr.sdk.core@a87f85fa91d3\Editor\BuildingBlocks\BlockData\PassthroughCameraVisualizer\Scripts\PassthroughCameraVisualizerBlockData.cs(31,24): error CS0246: The type or namespace name 'PassthroughCameraAccess' could not be found (are you missing a using directive or an assembly reference?)25Views0likes1CommentMixed Reality with Unity and Meta SDK Test
Hi, I have been developing in Meta Horizon since 2020 and have learned UnityXR/MR. I will graduate with a masters degree in Art and Technology in May 2026. For my final project I will be working on a Mixed Reality interaction for dyslexic learners with hand tracking. I will be applying for the smart glasses grant for accessibility. I've been in education for the past 19 years, teaching students with dyslexia for the past ten years. This video shows my first test. Link and image below. Mixed Reality Test, Quest 3: Mixed Reality Test, Unity and Meta SDK by Tina Wheeler10Views0likes0Comments