diff --git a/sdks/csharp/src/ISpacetimeDBLogger.cs b/sdks/csharp/src/ISpacetimeDBLogger.cs
index 7678a03265b..8ec7c265f96 100644
--- a/sdks/csharp/src/ISpacetimeDBLogger.cs
+++ b/sdks/csharp/src/ISpacetimeDBLogger.cs
@@ -1,4 +1,7 @@
using System;
+#if UNITY_5_3_OR_NEWER
+using UnityEngine;
+#endif
namespace SpacetimeDB
{
@@ -25,6 +28,21 @@ public static class Log
new ConsoleLogger();
#endif
+ ///
+ /// Resets the static instance to prevent data persistence when Enter Play Mode Options (Disable Domain Reloading) is active.
+ /// RuntimeInitializeOnLoadMethod is used since it is supported in older versions of Unity.
+ /// AutoStaticsCleanup and NoAutoStaticsCleanup is only supported in Unity 6+
+ ///
+ ///
+ /// See the Unity Domain Reloading Manual
+ /// and the RuntimeInitializeOnLoadMethodAttribute API Docs for details.
+ ///
+ [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
+ private static void ResetStaticFields()
+ {
+ Current = new UnityDebugLogger();
+ }
+
public static void Debug(string message) => Current.Debug(message);
public static void Trace(string message) => Current.Trace(message);
public static void Info(string message) => Current.Info(message);
diff --git a/sdks/csharp/src/SpacetimeDBClient.cs b/sdks/csharp/src/SpacetimeDBClient.cs
index ef202ed168b..3b44aed478d 100644
--- a/sdks/csharp/src/SpacetimeDBClient.cs
+++ b/sdks/csharp/src/SpacetimeDBClient.cs
@@ -6,6 +6,9 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+#if UNITY_5_3_OR_NEWER
+using UnityEngine;
+#endif
using SpacetimeDB.BSATN;
using SpacetimeDB.ClientApi;
using Thread = System.Threading.Thread;
@@ -289,6 +292,21 @@ internal struct ParsedMessage
private static readonly Status Committed = new Status.Committed(default);
+ ///
+ /// Resets the static instance to prevent data persistence when Enter Play Mode Options (Disable Domain Reloading) is active.
+ /// RuntimeInitializeOnLoadMethod is used since it is supported in older versions of Unity.
+ /// AutoStaticsCleanup and NoAutoStaticsCleanup is only supported in Unity 6+
+ ///
+ ///
+ /// See the Unity Domain Reloading Manual
+ /// and the RuntimeInitializeOnLoadMethodAttribute API Docs for details.
+ ///
+ [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
+ private static void ResetStaticFields()
+ {
+ IsTesting = false;
+ }
+
///
/// Get a description of a message suitable for storing in the tracker metadata.
///
diff --git a/sdks/csharp/src/SpacetimeDBNetworkManager.cs b/sdks/csharp/src/SpacetimeDBNetworkManager.cs
index 379bf63d86b..5fa50211481 100644
--- a/sdks/csharp/src/SpacetimeDBNetworkManager.cs
+++ b/sdks/csharp/src/SpacetimeDBNetworkManager.cs
@@ -12,6 +12,21 @@ public class SpacetimeDBNetworkManager : MonoBehaviour
{
internal static SpacetimeDBNetworkManager? _instance;
+ ///
+ /// Resets the static instance to prevent data persistence when Enter Play Mode Options (Disable Domain Reloading) is active.
+ /// RuntimeInitializeOnLoadMethod is used since it is supported in older versions of Unity.
+ /// AutoStaticsCleanup and NoAutoStaticsCleanup is only supported in Unity 6+
+ ///
+ ///
+ /// See the Unity Domain Reloading Manual
+ /// and the RuntimeInitializeOnLoadMethodAttribute API Docs for details.
+ ///
+ [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
+ private static void ResetStaticFields()
+ {
+ _instance = null;
+ }
+
public void Awake()
{
// Ensure that users don't create several SpacetimeDBNetworkManager instances.
diff --git a/sdks/csharp/src/Table.cs b/sdks/csharp/src/Table.cs
index 609444815d5..c164b8ff985 100644
--- a/sdks/csharp/src/Table.cs
+++ b/sdks/csharp/src/Table.cs
@@ -4,6 +4,9 @@
using System.IO;
using System.Linq;
using System.Threading.Tasks;
+#if UNITY_5_3_OR_NEWER
+using UnityEngine;
+#endif
using SpacetimeDB.BSATN;
using SpacetimeDB.ClientApi;
using SpacetimeDB.EventHandling;
@@ -242,6 +245,21 @@ private static IReadWrite Serializer
}
}
+ ///
+ /// Resets the static instance to prevent data persistence when Enter Play Mode Options (Disable Domain Reloading) is active.
+ /// RuntimeInitializeOnLoadMethod is used since it is supported in older versions of Unity.
+ /// AutoStaticsCleanup and NoAutoStaticsCleanup is only supported in Unity 6+
+ ///
+ ///
+ /// See the Unity Domain Reloading Manual
+ /// and the RuntimeInitializeOnLoadMethodAttribute API Docs for details.
+ ///
+ [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
+ private static void ResetStaticFields()
+ {
+ _serializer = null;
+ }
+
// The function to use for decoding a type value.
Row DecodeValue(BinaryReader reader) => Serializer.Read(reader);