Hoppa till innehåll

Attribut för editorkommandon och initiering

↑
Referens för Unity 6

Metodattribut kan skapa kommandon i Inspector, menyer i editorn och initieringspunkter. Den viktigaste skillnaden är var metoden körs: i editorn eller i ett byggt spel.

Attribut Syfte Gäller för och kräver
[ContextMenu("Title")] Kör en instansmetod från komponentens snabbmeny. Method · UnityEngine
[MenuItem("MyMenu/Action")] Lägg till ett kommando i Unity Editors menyrad. Static method · UnityEditor
[InitializeOnLoadMethod] Kör en statisk editormetod efter att Unity startat eller laddat om assemblies. Static method · UnityEditor
[RuntimeInitializeOnLoadMethod] Anropa en statisk metod under uppstarten av körmiljön. Static method · UnityEngine

Kör en instansmetod från komponentens snabbmeny.

Använd när: Kör en snabb kontroll eller återställning från en komponent.

Tänk på: Passar för editorhjälpmedel, till exempel återställning och felsökning.

Referens: Unity documentation

Lägg till ett kommando i Unity Editors menyrad.

Använd när: Lägg ett återanvändbart verktyg under Tools-menyn i Unity Editor.

Tänk på: Endast editorn. Placera koden i en Editor-mapp eller editorassembly.

Referens: Unity documentation

Kör en statisk editormetod efter att Unity startat eller laddat om assemblies.

Använd när: Registrera editorverktyg efter en assembly reload utan användaråtgärd.

Tänk på: Detta är editorinitialisering, inte start av spelet eller en player build.

Referens: Unity documentation

Anropa en statisk metod under uppstarten av körmiljön.

Använd när: Starta runtime-tjänster före eller under sceninitialisering.

Tänk på: Ange RuntimeInitializeLoadType om det spelar roll när metoden körs.

Referens: Unity documentation

Unity C# | ResettableHealth.cs
using UnityEngine;
public sealed class ResettableHealth : MonoBehaviour
{
[SerializeField] private int health = 100;
[ContextMenu("Restore Full Health")]
private void RestoreFullHealth()
{
health = 100;
}
}

Metoden hör till komponenten och visas i dess snabbmeny i Inspector.

Unity C# | Editor/ProjectTools.cs
using UnityEditor;
using UnityEngine;
public static class ProjectTools
{
[MenuItem("Tools/HCSTech/Print Project Path")]
private static void PrintPath()
{
Debug.Log(Application.dataPath);
}
[InitializeOnLoadMethod]
private static void SetupOnEditorLoad()
{
// Keep startup logic small and idempotent.
}
}

Placera den andra filen i Editor/ eller en asmdef som endast gäller editorn. Spelbyggen ska inte kompilera referenser till UnityEditor.

Unity C# | RuntimeStartup.cs
using UnityEngine;
public static class RuntimeStartup
{
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void Initialize()
{
Debug.Log("Runtime initialized before the first scene loads.");
}
}