khoi
NNormal
•Created by khoi on 5/29/2025 in #🤝ask-a-question
Moderator Muting Ownership
Let's say I have an AvatarSync on my RealtimeAvatar that has the bool _isMuted. I believe that RealtimeAvatarManager spawns VR Player Character with ownership belonging to the client who is the actual player. If I want a moderator to be able to set _isMuted on another player to true, do I have to RequestOwnership()? Then how do I give ownership back once the client who owns it updates it? Call RequestOwnership() inside the DidChange callback if MyClientID == originalOwner or something?
6 replies
NNormal
•Created by khoi on 5/26/2025 in #🤝ask-a-question
RealtimeDictionary.Count Accuracy
Is the .Count always accurate? What does this mean in the docs:
"Adding or removing items sends the minimal amount of information to the server in order to perform the update on all clients. The whole collection is not sent every time."
4 replies
NNormal
•Created by khoi on 5/26/2025 in #🤝ask-a-question
Separating Realtime.Destroy() from OnDestroy when a client leaves/stops playing?
Can I set destroyWhenOwnerOrLastClientLeaves to false to prevent OnDestroy from running on my RealtimeComponent?
Basically I have an OnDestroy on my RealtimeComponent that I want to run when Realtime.Destroy() is called. But not when a client disconnects (which triggers OnDestroy for monobehaviours)
7 replies
NNormal
•Created by khoi on 5/16/2025 in #💭feature-request
Datastore Dashboard for Debugging
As a Normcore developer trying to debug a multiplayer game by myself, I would like to type in my room ID to a dashboard and see the datastore in a readable format such that I could play my game by myself and see if the server is getting updates for certain values that I expect. Bonus points if I can artificially "claim ownership" from the dashboard.
I understand I could make a Windows build to run in parallel with my VR game but I would have to build it out. (Unless someone has tips on an easy way to do it!)
7 replies
NNormal
•Created by khoi on 5/15/2025 in #🤝ask-a-question
"Incrementing" a value on a model
If I have a private int _damage on a model, and then I do the following code:
public void AddDamageToModel(int damage)
{
SetDamage(model.damage + damage);
}
public void SetDamage(int damage)
{
model.damage = damage;
}
And multiple clients call this function. What happens? Will it sequentially increment without overriding each other?
16 replies
NNormal
•Created by khoi on 5/14/2025 in #🤝ask-a-question
Punching networked enemies
Gameplay: multiple people facing a wave of enemies. If I punch an enemy, I want it to fly for everyone. Is this the right architecture?
Enemies have kinematic rigidbodies with RealtimeTransform. If I punch an enemy (via OnTriggerEnter), I claim ownership of the enemy RealtimeTransform. I turn the rigidbody (on my client) to kinematic = false, apply my custom punch force with physics. The enemy flies on my client and its transform gets synced to other clients via RealtimeTransform. SO everyone sees it fly. Once the enemy hits the ground and finishes rolling, I release the ownership and set the rigidbody kinematic = true again.
I understand we can just do networked rigidbodies and Unity physics collision and this is handled mostly "automatically" but I want to use OnTriggerEnter to do some custom punch power calculations based on the puncher's "strength level."
101 replies
NNormal
•Created by khoi on 5/13/2025 in #💭feature-request
Moderation Voice Snippet API
If someone reports a player in my game, I can just tell Normcore to pull the last 60sec of an audiostream from a specific client so I can listen to their voice chat for evidence of code of conduct violations. Ideally it would store in the Normcore dashboard until I delete it. Bonus points for auto detecting and flagging slurs. Would pay 💰 0.15c / hour of voice pulled, processed and stored (cost of ToxMod from modulate.ai).
3 replies
NNormal
•Created by khoi on 5/10/2025 in #🥂project-showcase
Punch Party Open Beta
https://www.tiktok.com/t/ZTjy4EDRX/
a glorious homecoming of a launch week to the start of me and @kyle’s journey back into the world of VR. we were deep in VR from 2016-2021, shipping games, research experiences, and even enterprise training software. i worked on the apple vision pro and kyle worked on meta horizon worlds. we even saw max’s talk at OC3! after a few years away from vr we felt the call again.
punch party started as a goofy grinding boxing simulator game inspired by roblox and has evolved into a multiplayer bonanza filled with physics based punching combat, hide and seek, and soon pve quests.
we’d love you to hop in and try it, and drop a 5 star written review on the store if you like it!
2 replies
NNormal
•Created by khoi on 5/6/2025 in #🤝ask-a-question
If multiple clients run the following code to clear a RealtimeDictionary, what happens?
foreach (var kvp in model.playerPoints)
{
model.playerPoints.Remove(kvp.Key);
}
Where
[RealtimeProperty(1, true, true)]
private RealtimeDictionary<PlayerPointsModel> _playerPoints;
5 replies
NNormal
•Created by khoi on 5/1/2025 in #🤝ask-a-question
Syncing existing data in a model to a new joiner
When a new person joins and connects to Realtime, I want them to be able to read data from an existing RealtimeDictionary that already has data inside a RealtimeComponent. Where do I do this? In OnRealtimeModelReplaced? If so, how do I access the existing data / when do I know that the local sync has the remote data?
8 replies
NNormal
•Created by khoi on 4/30/2025 in #🤝ask-a-question
Is didConnectToRoom realtime different from the original?
In this example:
class OfflineModeExample {
[SerializeField]
private Realtime _realtime;
private void Start() {
// Notify us when Realtime successfully connects to the room
_realtime.didConnectToRoom += DidConnectToRoom;
// Connect to "My Room" in offline mode
_realtime.Connect("My Room", new Room.ConnectOptions {
offlineMode = true
});
}
private void DidConnectToRoom(Realtime realtime) {
if (realtime.room.offlineMode) {
Debug.Log($"Connected to room in offline mode!");
}
}
}
There is _realtime and then in DidConnectToRoom realtime. Why are these different? I am logging both and they give different room.name results...8 replies
NNormal
•Created by khoi on 4/30/2025 in #🤝ask-a-question
Getting player count before connecting
Is it possible to poll all connected rooms and see how many players are in each so I can Connect a new player joining to a room that is not "full" (eg below a threshold I set)? I saw there is a Lobby API in testing last year, as well as a Rooms API in beta?
7 replies
NNormal
•Created by khoi on 4/29/2025 in #🤝ask-a-question
OnRealtimeModelReplaced what happens if I don't initialize fresh model?
In OnRealtimeModelReplaced, what will happen if I don't initialize the values of a fresh model?
if (currentModel != null)
{
if (currentModel.isFreshModel)
{
Debug.LogError("FRESH MODEL");
currentModel.leftIndexTriggerNormalized = LeftIndexTriggerNormalized;
currentModel.rightIndexTriggerNormalized = RightIndexTriggerNormalized;
Eg, what if I leave a bunch of currentModel.[FIELD] values uninitialized?4 replies
NNormal
•Created by khoi on 4/10/2025 in #🤝ask-a-question
Avatar Physics Interactions
I'm building a VR game where you can push/hit someone and make them move (similar to Orion Drift ball where you can push someone and make them fly backwards).
What is ideal architecture for this? Thinking about using an RPC to send a rigidbody.AddForce event to your client when I intersect your avatar on my side. Considered having your local avatar have networked physics on them but not sure that makes sense from a multiplayer PVP perspective (eg the person hitting should be the source of truth).
So proposal is: I push your avatar on my client, trigger collider event happens, then it sends an RPC to your client which does the physics on your side. Your avatar maps to your rig, which just got pushed on your client, so everyone sees you move.
34 replies
NNormal
•Created by khoi on 2/8/2025 in #🤝ask-a-question
RealtimeComponent has been replaced with RealtimeComponent<TModel>

20 replies