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);
}