Hoppa till innehåll

Jämför liknande Unity-attribut

↑
Snabbval

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.

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 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 ä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.

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”
Unity C# | PlayerStats.cs
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.