Create a new game object and add VRC_PlayerObject + VRC_Enable_Persistence + An UdonScript with synced variables.
Try to check ownership of the object during start, or after player data restored:
```csharp
public override void OnPlayerRestored(VRCPlayerApi player) {
logDebug($"Player Restored: {player.displayName}");
if (!Networking.IsOwner(player, this.gameObject)) {
logDebug($"Player {player.displayName} does not own {this.gameObject.name}.");
return;
}
}
```
Ideally the object that is instantiated for a player should be owned by that player. The docs seem to indicate that this is the case, but doesn't actually work.
I tried using player.isLocal instead, but then late joiners will also process this event for all previous joiners' objects.
The only way I'm seeing to workaround this at the moment is to compare if the player is local, then check to see if the game object is in the list of objects' components returned by Networking.GetPlayerObjects(player);
SDK Worlds: 3.7.5