Physical transition between rooms in XR Quest 3 - How to?
Hello, I'm making a mixed reality app, and I have scanned two rooms in my house. I have used the Passthrough, MR Utility Kit and Effect Mesh building blocks, but I can't move between rooms without the screen getting covered up in grey, even though I can see the other room being rendered in the effect mesh. How can I disable this "out-of-bounds" effect in order to transition physically between both rooms? The first image is from the room I started the app, the second is from the second room looking towards the first.94Views0likes1CommentHow to Host/Client games with Mirror and Oculus Rooms ?
Hello everyone! I am working on multiplayer Oculus Quest game that has dedicated servers on Playfab and players could host their own game to play private match with friends. The netcode uses Mirror (HLAPI) and Ignorance Transport (UDP). So I'm working with Oculus.Platform.Rooms to connect friends when they're invited. In the room debugger tool, I see the two players connected in the same room but how to send/receive/synchronize informations ? I want the friend who joined to connect to the host player's. Is anyone already done something like this ? Must I use another Transport ? Project informations : Unity version : 2019.3.15f1 Oculus Utilities : v1.49.0 OVRPlugin : v1.49.0 Oculus SDK : v1.52.0 Mirror : 13.0.1 Ignorance : 1.3913Views0likes0Comments[Bug] Platform - Creating Invalid Requests causes CallbackRunner to silently consume Notifications
Unity 2018.4.3f1 | Oculus Unity Integration 1.38 Hi there, I'm just posting this to identify a bug I spent a while trying to diagnose that ate up my past week. I'm hoping that if anyone else has this issue, this might help them, and that proper steps may be taken to resolve this for newcomers using the Unity Integration tools for the first time. Here's the issue: When making a request that is "invalid", the Unity integration sometimes returns a proper request, but it has Request ID of 0. Any time that this happens, if I register a callback for it, Platform Notifications will be eaten, which may cause random, problematic bugs. Why does this happen? Oculus's Callback.cs contains two separate dictionaries mapping callbacks. In one, you have callbacks for regular repeating things - Room Data Updates, Invite Notifications, Voip Connectivity Changes, etc. In the other, you have mappings of Request IDs to callbacks, where Request IDs are sequential integers that are incremented. When a message is popped off of the ovr message stack, it goes into Callback.cs - HandleMessage. If there's a callback in the `requestIDsToCallbacks` dictionary, it uses it. Otherwise, it tries to see if it was registered in the notification dictionary. The problem is, if you EVER register a callback for a Request with ID 0, Notifications will be eaten up and error. This is because all notifications have Request ID = 0, which means that, TECHNICALLY, there is a callback waiting for Request 0, so that notification will disappear. ------------------------------------------------------ Here's an example. I have a project with a bunch of social properties around Rooms. I want to change the Room datastore to reflect certain environment changes. I can use the UpdateDataStore/ovr_Room_UpdateDataStore call to update my stuff. Well, it turns out that UpdateDataStore returns a Request, and I can schedule a callback for it, to know if the call succeeded or not. So let's say I have part of a call where I want to add new key/value pair to the room. Here's how the final call would look. ... data[key] = value; Rooms.UpdateDataStore(Room.ID, data).OnSuccess("Rooms.UpdateDataStore", (room) => { Debug.Log($"[Room] Successfully updated datastore on room ({room.ID}) with [{key}] | [{value}]"); }); ^ in the code above, OnSuccess is just an extension method that wraps around the default OnComplete: public static void OnSuccess<T>(this Request<T> request, string actionName = null, Action<T> callback) { request.OnComplete((message) => { if(message.IsError) { if(string.IsNullOrEmpty(actionName)) actionName = "Unknown Oculus Request"; var error = message.GetError(); error.Log(actionName); // uses my own extension method for logging prettily return; } else { callback(message.Data); } }); } Either way, that's not important. But imagine that I have this nice wrapper around OnComplete that logs in case of failure, and calls my callback in case of a success. This works most of the time. But... let's say that I am in a Solo Room. In that case, calling UpdateDataStore works just fine. It returns a Request, with Request ID 0. My code has been working just fine, and I schedule my callback. But... apparently, it was an error. What's the point of updating the datastore in a solo room if there's nobody to hear it? And because that request was never meant to happen, it doesn't return a proper Request that will return an Error in the Message. It just... is scheduled as Request ID 0, and it will never, ever, ever pop off the stack. It just sits there. Now, when a notification comes in - any notification at all, they all technically have Request ID 0. They will attempt to attempt to fire the callback for my "successfully updated the datastore" but it will error out during the cast, and log an error on line 142 of Callback.cs (Debug.LogError("Unable to handle message: ")... as ------------------------- Repro: 1. Schedule a notification callback for some regular repeating notification. 2. Call UpdateDataStore in a solo room and schedule the OnComplete callback. 3. The callback will never fire. 4. When the next Notification that comes in, it will try to fire that callback and error out, meaning that your notification callback will not get called. -------------------------- I use UpdateDataStore here as an example, but I've seen it happen in a number of other cases, for example, if you call Rooms.Get(currentRoomId).OnComplete(...), where your currentRoomId is 0 (solo room), it will return a proper Request with RequestID = 0 , that will never get called, and trigger this. I had some logic that refreshed the current room in certain conditions, and noticed that it was causing the same issue. Clearly, I should've used GetCurrent, but the point still stands, that I would have rather gotten an error in the callback, rather than a silent no-op that never triggers, and causes me to have intermittent broken failures. The fix on the Oculus side should be pretty easy. You guys need to either: a) Handle the case where the Request ID is 0 and not schedule it. b) Process notifications before processing requests in HandleMessage c) Not return requests with id = 0, but schedule proper requests with an error so that people can know what they are doing wrong. d) Change Notifications to have RequestId = -1 (which won't work since you're using ulongs for the request ID). e) Force all users to check every request that ever triggers to see if it is 0, and not actually schedule the callback in that case. (What I did on my end using an extension method). TLDR: As it currently stands, any time the Oculus Platform API calls returns a Request/Request<T> with an ID of 0, the next notification message will be swallowed up and not fired in the application which will cause indeterminate errors. I've handled it on my end, but this might cause tons of problems for other people running into intermittent notification disappearances.928Views3likes0CommentsIssues with accepting room invites
I'm working on implementing rooms for a multiplayer experience following the Oculus documentation: https://developer.oculus.com/documentation/platform/latest/concepts/dg-rooms/ I'm able to send invites using Rooms.LaunchInvitableUserFlow. The invited user gets a notification to join the game, as expected. The app launches when the user clicks accept on the notification. RoomInviteAcceptedNotificationCallback should trigger when the user launches the app through a notification, but it's not being called. It looks like the Notification_Room_InviteAccepted message that should trigger the callback is never being sent. I've also tried checking the LaunchType on startup using: LaunchDetails launchDetails = new LaunchDetails(CAPI.ovr_ApplicationLifecycle_GetLaunchDetails()); if (launchDetails.LaunchType == LaunchType.Invite) { ... } But the LaunchType is always Normal instead of Invite. Does anyone have any ideas or pointers? Thanks!657Views0likes0CommentsMultiplayer Development: Rooms + separate networking library?
So I'd like to develop a multiplayer game for Oculus Home and use whatever networking library I want... but still allow users to invite each other based on their Oculus friends list. As far as I can tell from digging into the docs, the only way to tap into that social functionality of the platform is via the "Rooms" component of the platform SDK. Is that correct? Is it common practice to basically, upon creating a multiplayer session with my networking library of choice, also create a "room" via the platform SDK and store the connection information to the game session to the room data store?718Views0likes0Comments[REOPENED] Oculus Platform - Invite user to room
Hi, I am trying to implement the oculus platform room feature and am wanting to know what happens after calling Oculus.Platform.Rooms.InviteUser("the rooms ID","the invite token for that user"); The callback for this is being received by the sender but am not sure what I need to do to get the information on the invited users end. Can anyone please tell me what I need to do to get the invite on the other end?2.2KViews0likes6Comments