🤝ask-a-question
💼jobs-and-opportunities
💾sample-code
🥂project-showcase
💭feature-request
✨normcore
💬chat
🚧wip-and-updates
Disable Local XR Avatar
It would be nice if there was a tick box to not create a local avatar. If you try to disable the local avatar (destroying or setting inactive) other avatars do not work for some reason. My current solution is looping through the renderers in the local avatar and disabling those.
This is a useful feature in the case you want:
- Your local player to be independent from the avatar system. I wanted models on my local player prefab so that they are visible in single player without the avatar manager.
- Also, it's useful to only have one player 1 running around the scene in multiplayer, instead of one bodyless player 1 and one avatar for player 1....
Let me optionaly pick a server to join
At the moment Normcore pings clusters and picks for me but I want to see all the servers and pick myself.
Maybe you are playing with a friend in another country and want to pick a place in between or maybe certain servers just work better for you.
In any case, more choice and control is better....
player management
Being able to ban people in your game or giving moderators into your game. I’ve been trying to see how to kick people but I don’t know how
Clear a RealtimeArray
I understand that we can't have a remove for a RealtimeArray to avoid race conditions, but clearing the entire array is a very useful operation for this powerful structure! Clearing it would make the structure even better! Let's clean data! 🧹
Overridable Model methods
As the title says, being able to override some model methods by having them be virtual, such as
RequestOwnership
, SetOwnership
, and ClearOwnership
would be very nice as I cannot do this on my own. Yes I know I can abstract them out, but it can be confusing to other's in the project when they see RequestOwnership still available and bypassing perhaps any potential safety checks / additional calls. I believe this should be pretty simple and AFAIK not break anything as the signature would be...Dedicated server option for unlimited?
No idea how technically difficult it is to allow it but even if it was just for data and not audio it could make running AI's considerably easier. And we would be talking about drastically smaller amounts of data than enterprise customers.
Micro-optimizations to allow more dynamic objects
When profiling my game, normcore's Realtime.Update is consistently the most expensive part of my update loop. Even in a best case scenario, when idling in my game, when most objects are not moving, and we're not spawning any synced objects.
The most expensive method when idling is RealtimeModel.OnWillWrite. Within that, the most expensive OnWillWrite is RealtimeTransformModel, and within that RealtimeTransformRigidbody.OnLocalModelWillWrite is most expensive. A quick look at a deep profile sample shows some micro-optimisations which could shave a signficant percentage of the CPU cost of updating RealtimeTransforms.
From the call counts in this screenshot, you can see there are: ...
The most expensive method when idling is RealtimeModel.OnWillWrite. Within that, the most expensive OnWillWrite is RealtimeTransformModel, and within that RealtimeTransformRigidbody.OnLocalModelWillWrite is most expensive. A quick look at a deep profile sample shows some micro-optimisations which could shave a signficant percentage of the CPU cost of updating RealtimeTransforms.
From the call counts in this screenshot, you can see there are: ...
More server regions
I know you weren't going to add China servers but I'll add a request for one anyway 😛
Server state website
Having connection issues?
Check straight away if it's a server issue or something else.
Usually we have to ask on discord if anyone else is having connection issues and then wait for an update on the situation....
Offline Mode
This has been pitched before for sure, but I am gonna make a thread here so it's more known that it'd be a wanted feature. Basically the ability to have Normcore components still be able to function even without a connection to a server. I am not sure of the underlying technical implemenations for this, but I'd like to believe it'd be theoretically possible. Stuff like my player / interaction / world objects are so tied into network stuff that getting it working in singleplayer would be a nigh...
Auto-Requesting RealtimeTransforms (Rigidbody) on connect
I do not believe this is a base feature currently, but having Normcore automatically take ownership of a RealtimeTransform with a rigidbody attached when you are the first joiner would make some additional logic a lot more simple and save new developers the headache of wondering why their objects are floating in midair on first connection. (the image may or may not have been faked for dramatic effect)
Auto-Reconnect
This is pretty simple to do yourself but I've seen lots of questions about this on discord.
Also if it were a built-in feature you could enforce your own back off rate to prevent servers from getting slammed when they come back online.
Just add a toggle for auto-reconnect and maybe a callback in case there are things you need to happen on reconnecting....
Network Profiler
Something like this could be super sweet to have while not being extremely complicated. Unity allows creation of custom profiler modules, so perhaps even one with simple stats like outbound / inbound data as well as what sent it out / received it could be extremely useful in tracking down bandwidth hogs and squash them.
App wide data storage
I know you're not in the cloud storage business but a lot of people use a room to store data in like room names or leaderboards and having a realtime instance to connect to these data only rooms is kinda cumbersome.
What if instead you had some amount of data you can access from any room to do with what you will?
You could upsell it as an addon package if you wanted....
Oculus Nonce Check
This was mentioned as a possible feature before so I'll add it here as a reminder 😛
View how much data is stored in a room
The docs say a room can hold 10MB of data so I would like to know how much data is used and how much space is left
Delete all the persistent data in a room
In case you want to reset a room. You might have hundreds of persistent objects you want to get rid of.
Copy data from one room to another
Say you're making a level editor and you want to be able to save a copy for public searches and keep a private copy you can continue to edit.
A single function to copy all the persistent data from one room to another without calling Realtime.Instantiate on the new room loads of times would be really helpful....
UnownedSelf Event?
It seems like an Unowned event would be potentially more useful/efficient than OwnerIDSelfDidChange because the biggest use case for using that current event is to then check if it is unowned and then request ownership if it is. Which would then fire OwnerIDSelfDidChange again and for all objects that only actually cared if it becomes unowned.