Jämför liknande Unity-attribut
↑Kortfattat
Section titled “Kortfattat”Dessa attribut kan verka lika men löser olika problem. Börja med att fråga om du vill ändra data, hur ett fält visas, eller när kod körs.
[SerializeField] vs [SerializeReference]
Section titled “[SerializeField] vs [SerializeReference]”Använd SerializeField för vanliga fält som Unity kan serialisera. Välj SerializeReference när du behöver polymorfa hanterade objektreferenser, referensidentitet eller cykler. Använd det inte för UnityEngine.Object-referenser.
[HideInInspector] vs [NonSerialized]
Section titled “[HideInInspector] vs [NonSerialized]”HideInInspector döljer ett serialiserat fält i standard-Inspector. [System.NonSerialized] undantar ett publikt fält från Unitys serialisering. Att dölja är ingen säkerhetsåtgärd.
[ExecuteAlways] vs [ExecuteInEditMode]
Section titled “[ExecuteAlways] vs [ExecuteInEditMode]”ExecuteAlways är det rekommenderade moderna valet för skript som kan hantera både redigeringsläge och Prefab Mode. ExecuteInEditMode är äldre och kan ge problem i Prefab Mode. Ingen av dem gör att avaktiverade MonoBehaviours körs som vanligt.
[ContextMenu] vs [ContextMenuItem]
Section titled “[ContextMenu] vs [ContextMenuItem]”Sätt ContextMenu på en instansmetod för att skapa ett kommando i komponentmenyn. Sätt ContextMenuItem på ett fält för ett snabbmenyval vid fältet; det är ingen permanent knapp.
[RuntimeInitializeOnLoadMethod] vs [InitializeOnLoadMethod]
Section titled “[RuntimeInitializeOnLoadMethod] vs [InitializeOnLoadMethod]”Använd RuntimeInitializeOnLoadMethod vid uppstart av körmiljön, även i spelbyggen. Använd InitializeOnLoadMethod endast när editorn startar eller laddar om assemblies, och placera koden i en editorassembly.
Exempel: behåll data när ett fält döps om
Section titled “Exempel: behåll data när ett fält döps om”using UnityEngine;using UnityEngine.Serialization;
public sealed class PlayerStats : MonoBehaviour{ [FormerlySerializedAs("startingLives")] [SerializeField, Min(0)] private int lives = 3;
public int Lives => lives;}Här används FormerlySerializedAs för att behålla befintliga Inspector-värden efter en namnändring. SerializeField gör fältet serialiserat, och Min styr Inspector-inmatningen.
