Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


AutoStaticsCleanupAttribute

Resets static variables automatically on entering or exiting Play mode with domain reload disabled.
Read time 4 minutesLast updated 11 days ago

Definition

[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]
resets state as follows:
  • 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,
    static int myInt = 5;
    resets to
    5
    .
  • For reference-type fields initialized with
    new
    , the initializer is evaluated again, so a new instance is created. For example,
    static MyObj obj = null;
    resets to
    null
    and
    static MyObj obj = new();
    creates a fresh
    MyObj
    when Play mode starts.
  • readonly
    static collection fields (such as
    List<T>
    ,
    Dictionary<TKey,TValue>
    ,
    HashSet<T>
    , and any type with a parameterless
    Clear
    method) are a special case: instead of replacing the instance, the existing collection is preserved and
    Clear
    is called. Non-readonly static collections are reset normally by reapplying their initializer. For
    readonly
    fields, the initializer must either be omitted, use
    new()
    , or use the exact declared type — for example,
    = 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++; }}

Inheritance

Inherited Members