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