AutoStaticsCleanupAttribute
Resets static variables automatically on entering or exiting Play mode with domain reload disabled.
Read time 4 minutesLast updated 11 days ago
Definition
- Type: Class
- Namespace: Unity.Scripting.LifecycleManagement
- Assembly: Unity.Scripting
- Inherits from: Attribute
[AttributeUsage(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Event, AllowMultiple = true)]public sealed class AutoStaticsCleanupAttribute : Attribute
Remarks
This attribute can be applied to classes, structs, fields, properties, and events. Applying it to a class or struct ensures all static members of the class or struct are automatically reset.
[AutoStaticsCleanup]- Static fields are restored by reapplying their field initializer. If no initializer is present, the field is reset to its C# default value. For example, resets to
static int myInt = 5;.5 - For reference-type fields initialized with , the initializer is evaluated again, so a new instance is created. For example,
newresets tostatic MyObj obj = null;andnullcreates a freshstatic MyObj obj = new();when Play mode starts.MyObj - static collection fields (such as
readonly,List<T>,Dictionary<TKey,TValue>, and any type with a parameterlessHashSet<T>method) are a special case: instead of replacing the instance, the existing collection is preserved andClearis called. Non-readonly static collections are reset normally by reapplying their initializer. ForClearfields, the initializer must either be omitted, usereadonly, or use the exact declared type — for example,new().= new List<string>()
For more information, refer to Enter Play mode with domain reload disabled in the manual.
Examples
using Unity.Scripting.LifecycleManagement;using UnityEngine;public partial class MyCounterClass : MonoBehaviour{ [AutoStaticsCleanup] public static int cleanedUpCounter = 0; void Start() { Debug.Log(cleanedUpCounter); // Counter value is reset each time entering Play Mode cleanedUpCounter++; }}