1 / 1
Feb 2024

Please help me integrating my code with the Flexible sync in Unity using realm SDK for .NET. All the tutorials I found used Partition Based sync but now Partition Based sync is deprecated. I keep getting the error-- RealmException: Cannot write to class PlayerData when no flexible sync subscription has been created.

I really need helps.

This is my code:

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using Realms; using System.Linq; using Realms.Sync; using MongoDB.Bson; public class RealmController : MonoBehaviour { public static RealmController Instance; [SerializeField] private string _realmAppId = "mongodbtest-utril"; private Realm _realm; private App _realmAPP; private User _realmUser; //[SerializeField] private string _realmApp = ""; async void Awake() { DontDestroyOnLoad(gameObject); Instance = this; if (_realm == null) { _realmAPP = App.Create(new AppConfiguration(_realmAppId)); if (_realmAPP.CurrentUser == null) { _realmUser = await _realmAPP.LogInAsync(Credentials.Anonymous()); var config = new FlexibleSyncConfiguration(_realmUser) { PopulateInitialSubscriptions = (realm) => { var myItems = realm.All<PlayerData>().Where(n => n.UserID == _realmUser.Id); realm.Subscriptions.Add(myItems); } }; _realm = await Realm.GetInstanceAsync(config); } else { _realmUser = _realmAPP.CurrentUser; var config = new FlexibleSyncConfiguration(_realmUser) { PopulateInitialSubscriptions = (realm) => { var myItems = realm.All<PlayerData>().Where(n => n.UserID == _realmUser.Id); realm.Subscriptions.Add(myItems); } }; _realm = await Realm.GetInstanceAsync(config); } } } void OnDisable(){ if(_realm != null){ _realm.Dispose(); } } public bool IsRealmReady(){ return _realm != null ? true : false; } public PlayerData GetOrCreatePlayerData() { PlayerData playerData = _realm.All<PlayerData>().Where(player => player.UserID == _realmUser.Id).FirstOrDefault(); if (playerData == null) { _realm.Write(() => { playerData = _realm.Add(new PlayerData() { UserID = _realmUser.Id, X = 0, Y = 0, Score = 0 }); }); } return playerData; } public void UpdatePosition(Vector2 position){ PlayerData playerData = GetOrCreatePlayerData(); _realm.Write(() =>{ playerData.X = position.x; playerData.Y = position.y; }); } public void IncreaseScore(int value) { PlayerData playerData = GetOrCreatePlayerData(); _realm.Write(() => { playerData.Score += value; }); } public int GetScore() { PlayerData playerData = GetOrCreatePlayerData(); return playerData.Score; } public Vector2 GetPosition(){ PlayerData playerData = GetOrCreatePlayerData(); return new Vector2(playerData.X, playerData.Y); }