Suche…


Syntax

  • [AddComponentMenu (Zeichenfolge Menüname)]
  • [AddComponentMenu (Zeichenfolge menuName, int order)]
  • [CanEditMultipleObjects]
  • [ContextMenuItem (Stringname, Stringfunktion)]
  • [ContextMenu (Name der Zeichenfolge)]
  • [CustomEditor (Typ inspectedType)]
  • [CustomEditor (Typ inspectedType, bool editorForChildClasses)]
  • [CustomPropertyDrawer (Typtyp)]
  • [CustomPropertyDrawer (Typtyp, bool useForChildren)]
  • [DisallowMultipleComponent]
  • [DrawGizmo (GizmoType-Gizmo)]
  • [DrawGizmo (GizmoType-Gizmo, Typ drawGizmoType)]
  • [ExecuteInEditMode]
  • [Header (String-Header)]
  • [HideInInspector]
  • [InitializeOnLoad]
  • [InitializeOnLoadMethod]
  • [MenuItem (String itemName)]
  • [MenuItem (Zeichenfolge itemName, bool isValidateFunction)]
  • [MenuItem (String itemName, bool isValidateFunction, int-Priorität)]
  • [Mehrzeilig (int lines)]
  • [PreferenceItem (Stringname)]
  • [Reichweite (Schwimmer min, Schwimmer max)]
  • [RequireComponent (Typ)
  • [RuntimeInitializeOnLoadMethod]
  • [RuntimeInitializeOnLoadMethod (RuntimeInitializeLoadType loadType)]
  • [SerializeField]
  • [Space (Schwimmerhöhe)]
  • [TextArea (int minLines, int maxLines)]
  • [Tooltip (String-Tooltip)]

Bemerkungen

SerializeField

Das Unity-Serialisierungssystem kann für folgende Aufgaben verwendet werden:

  • Kann öffentliche nicht statische Felder (von serialisierbaren Typen) serialisieren
  • Kann nicht öffentliche, nicht statische Felder serialisieren, die mit dem Attribut [SerializeField] gekennzeichnet sind
  • Statische Felder können nicht serialisiert werden
  • Statische Eigenschaften können nicht serialisiert werden

Ihr Feld wird, selbst wenn es mit dem SerializeField-Attribut markiert ist, nur dann zugewiesen, wenn es von einem Typ ist, den Unity serialisieren kann.

  • Alle Klassen, die von UnityEngine.Object erben (zB GameObject, Component, MonoBehaviour, Texture2D)
  • Alle grundlegenden Datentypen wie int, string, float, bool
  • Einige eingebaute Typen wie Vector2 / 3/4, Quaternion, Matrix4x4, Color, Rect, LayerMask
  • Arrays eines serialisierbaren Typs
  • Liste eines serialisierbaren Typs
  • Aufzählungen
  • Structs

Allgemeine Inspektorattribute

[Header( "My variables" )]
public string MyString;

[HideInInspector]
public string MyHiddenString;

[Multiline( 5 )]
public string MyMultilineString;

[TextArea( 2, 8 )]
public string MyTextArea;

[Space( 15 )]
public int MyInt;

[Range( 2.5f, 12.5f )]
public float MyFloat;

[Tooltip( "This is a tip for MyDouble" )]
public double MyDouble;

[SerializeField]
private double myHiddenDouble;

Ergebnis

Wenn Sie den Mauszeiger über die Beschriftung eines Feldes bewegen:

Ergebnis2


[Header( "My variables" )]
public string MyString;

In der Kopfzeile wird eine fett gedruckte Beschriftung mit dem Text über dem zugewiesenen Feld angezeigt. Dies wird häufig für Kennzeichnungsgruppen verwendet, um sie von anderen Kennzeichnungen abzuheben.

[HideInInspector]
public string MyHiddenString;

HideInInspector verhindert, dass öffentliche Felder im Inspektor angezeigt werden. Dies ist nützlich für den Zugriff auf Felder aus anderen Teilen des Codes, wo sie sonst nicht sichtbar oder veränderbar sind.

[Multiline( 5 )]
public string MyMultilineString;

Multiline erstellt ein Textfeld mit einer bestimmten Anzahl von Zeilen. Bei Überschreitung dieses Betrags wird das Feld weder erweitert noch der Text umgebrochen.

[TextArea( 2, 8 )]
public string MyTextArea;

TextArea ermöglicht mehrzeiligen Text mit automatischem Zeilenumbruch und Bildlaufleisten, wenn der Text den zugewiesenen Bereich überschreitet.

[Space( 15 )]
public int MyInt;

Der Weltraum zwingt den Inspektor, zusätzlichen Abstand zwischen vorherigen und aktuellen Elementen einzufügen, was beim Unterscheiden und Trennen von Gruppen hilfreich ist.

[Range( 2.5f, 12.5f )]
public float MyFloat;

Range zwingt einen numerischen Wert zwischen einem Minimum und einem Maximum. Dieses Attribut funktioniert auch für Ganzzahlen und Doubles, obwohl min und max als Gleitkommazahlen angegeben sind.

[Tooltip( "This is a tip for MyDouble" )]
public double MyDouble;

Der Tooltip zeigt eine zusätzliche Beschreibung, wenn die Beschriftung des Felds überfahren wird.

[SerializeField]
private double myHiddenDouble;

SerializeField zwingt Unity zur Serialisierung des Felds - nützlich für private Felder.

Komponentenattribute

[DisallowMultipleComponent]
[RequireComponent( typeof( Rigidbody ) )]
public class AttributesExample : MonoBehaviour 
{
    [...]
}

[DisallowMultipleComponent]

Das DisallowMultipleComponent-Attribut verhindert, dass Benutzer mehrere Instanzen dieser Komponente zu einem GameObject hinzufügen.

[RequireComponent( typeof( Rigidbody ) )]

Mit dem RequireComponent-Attribut können Sie eine oder mehrere weitere Komponenten als Anforderungen angeben, wenn diese Komponente einem GameObject hinzugefügt wird. Wenn Sie diese Komponente zu einem GameObject hinzufügen, werden die erforderlichen Komponenten automatisch hinzugefügt (sofern noch nicht vorhanden). Diese Komponenten können erst entfernt werden, wenn die Komponente, für die sie erforderlich ist, entfernt wird.

Laufzeitattribute

[ExecuteInEditMode]
public class AttributesExample : MonoBehaviour 
{

    [RuntimeInitializeOnLoadMethod]
    private static void FooBar() 
    {
        [...]
    }

    [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.BeforeSceneLoad )]
    private static void Foo() 
    {
        [...]
    }

    [RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.AfterSceneLoad )]
    private static void Bar() 
    {
        [...]
    }

    void Update() 
    {
        if ( Application.isEditor )
        {
            [...]
        } 
        else
        {
            [...]
        }
    }
}

[ExecuteInEditMode]
public class AttributesExample : MonoBehaviour 

Das ExecuteInEditMode-Attribut zwingt Unity, die Zaubermethoden dieses Skripts auszuführen, auch wenn das Spiel nicht läuft.

Die Funktionen werden nicht ständig wie im Wiedergabemodus aufgerufen

  • Update wird nur aufgerufen, wenn sich etwas in der Szene geändert hat.
  • OnGUI wird aufgerufen, wenn die Game View ein Ereignis empfängt.
  • OnRenderObject und die anderen Renderback-Callback-Funktionen werden bei jeder Neulackierung der Szenenansicht oder Spielansicht aufgerufen.
[RuntimeInitializeOnLoadMethod]
private static void FooBar()

[RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.BeforeSceneLoad )]
private static void Foo() 

[RuntimeInitializeOnLoadMethod( RuntimeInitializeLoadType.AfterSceneLoad )]
private static void Bar() 

Mit dem Attribut RuntimeInitializeOnLoadMethod kann eine Laufzeitklassenmethode aufgerufen werden, wenn das Spiel die Laufzeit ohne Interaktion des Benutzers lädt.

Sie können angeben, ob die Methode vor oder nach dem Laden der Szene aufgerufen werden soll (after ist Standard). Die Reihenfolge der Ausführung ist für Methoden, die dieses Attribut verwenden, nicht garantiert.

Menüattribute

[AddComponentMenu( "Examples/Attribute Example" )]
public class AttributesExample : MonoBehaviour 
{
    [ContextMenuItem( "My Field Action", "MyFieldContextAction" )]
    public string MyString;

    private void MyFieldContextAction() 
    {
        [...]
    }

    [ContextMenu( "My Action" )]
    private void MyContextMenuAction() 
    {
        [...]
    }
}

Das Ergebnis des Attributs [AddComponentMenu]

Ergebnis 1

Das Ergebnis des Attributs [ContextMenuItem]

Ergebnis 2

Das Ergebnis des Attributs [ContextMenu]

Ergebnis 3


[AddComponentMenu( "Examples/Attribute Example" )]
public class AttributesExample : MonoBehaviour 

Mit dem AddComponentMenu-Attribut können Sie Ihre Komponente anstelle des Component-> Scripts-Menüs an einer beliebigen Stelle im Component-Menü platzieren.

[ContextMenuItem( "My Field Action", "MyFieldContextAction" )]
public string MyString;

private void MyFieldContextAction() 
{
    [...]
}

Mit dem Attribut ContextMenuItem können Sie Funktionen definieren, die dem Kontextmenü eines Felds hinzugefügt werden können. Diese Funktionen werden nach Auswahl ausgeführt.

[ContextMenu( "My Action" )]
private void MyContextMenuAction() 
{
    [...]
}

Mit dem ContextMenu-Attribut können Sie Funktionen definieren, die dem Kontextmenü der Komponente hinzugefügt werden können.

Editorattribute

[InitializeOnLoad]
public class AttributesExample : MonoBehaviour
{
    
    static AttributesExample() 
    {
        [...]
    }

    [InitializeOnLoadMethod]
    private static void Foo()
    {
        [...]
    }
}

[InitializeOnLoad]
public class AttributesExample : MonoBehaviour
{
    
    static AttributesExample() 
    {
        [...]
    }

Das Attribut InitializeOnLoad ermöglicht dem Benutzer das Initialisieren einer Klasse ohne Interaktion des Benutzers. Dies geschieht immer dann, wenn der Editor gestartet oder neu kompiliert wird. Der statische Konstruktor garantiert, dass dies vor allen anderen statischen Funktionen aufgerufen wird.

[InitializeOnLoadMethod]
private static void Foo()
{
    [...]
}

Das Attribut InitializeOnLoad ermöglicht dem Benutzer das Initialisieren einer Klasse ohne Interaktion des Benutzers. Dies geschieht immer dann, wenn der Editor gestartet oder neu kompiliert wird. Die Reihenfolge der Ausführung ist für Methoden, die dieses Attribut verwenden, nicht garantiert.


[CanEditMultipleObjects]
public class AttributesExample : MonoBehaviour 
{

    public int MyInt;

    private static string prefsText = "";

    [PreferenceItem( "My Prefs" )]
    public static void PreferencesGUI()
    {
        prefsText = EditorGUILayout.TextField( "Prefs Text", prefsText );
    }

    [MenuItem( "Attributes/Foo" )]
    private static void Foo()
    {
        [...]
    }

    [MenuItem( "Attributes/Foo", true )]
    private static bool FooValidate() 
    {
        return false;
    }
}

Das Ergebnis des [PreferenceItem] -Attributs

Ergebnis 2

Das Ergebnis des Attributs [MenuItem]

Ergebnis 3


[CanEditMultipleObjects]
public class AttributesExample : MonoBehaviour 

Mit dem CanEditMultipleObjects-Attribut können Sie Werte von Ihrer Komponente über mehrere GameObjects bearbeiten. Ohne diese Komponente wird Ihre Komponente bei der Auswahl mehrerer GameObjects nicht normal angezeigt. Stattdessen wird die Meldung "Bearbeitung mehrerer Objekte wird nicht unterstützt" angezeigt.

Dieses Attribut ist für benutzerdefinierte Editoren vorgesehen, die die Mehrfachbearbeitung unterstützen. Nicht-benutzerdefinierte Editoren unterstützen automatisch die Mehrfachbearbeitung.

[PreferenceItem( "My Prefs" )]
public static void PreferencesGUI()

Mit dem PreferenceItem-Attribut können Sie im Unity-Voreinstellungsmenü ein zusätzliches Element erstellen. Die empfangende Methode muss statisch sein, damit sie verwendet werden kann.

[MenuItem( "Attributes/Foo" )]
private static void Foo()
{
    [...]
}

[MenuItem( "Attributes/Foo", true )]
private static bool FooValidate() 
{
    return false;
}

Mit dem MenuItem-Attribut können Sie benutzerdefinierte Menüelemente erstellen, um Funktionen auszuführen. In diesem Beispiel wird auch eine Validatorfunktion verwendet (die immer false zurückgibt), um die Ausführung der Funktion zu verhindern.


[CustomEditor( typeof( MyComponent ) )]
public class AttributesExample : Editor
{
    [...]
}

Mit dem CustomEditor-Attribut können Sie benutzerdefinierte Editoren für Ihre Komponenten erstellen. Diese Editoren werden zum Zeichnen Ihrer Komponente im Inspektor verwendet und müssen von der Editor-Klasse abgeleitet werden.

[CustomPropertyDrawer( typeof( MyClass ) )]
public class AttributesExample : PropertyDrawer 
{
    [...]
}

Mit dem CustomPropertyDrawer-Attribut können Sie ein benutzerdefiniertes Eigenschaftenfach für den Inspektor erstellen. Sie können diese Schubladen für Ihre benutzerdefinierten Datentypen verwenden, damit sie im Inspektor verwendet werden können.

[DrawGizmo( GizmoType.Selected )]
private static void DoGizmo( AttributesExample obj, GizmoType type )
{
    [...]
}

Mit dem DrawGizmo-Attribut können Sie benutzerdefinierte Komponenten für Ihre Komponenten zeichnen. Diese Gizmos werden in der Szenenansicht gezeichnet. Sie können entscheiden, wann das Gizmo gezeichnet werden soll, indem Sie den Parameter GizmoType im DrawGizmo-Attribut verwenden.

Die Empfangsmethode erfordert zwei Parameter. Der erste ist die Komponente, für die das Gizmo gezeichnet werden soll, und die zweite ist der Zustand, in dem sich das Objekt befindet, in dem das Gizmo gezeichnet werden soll.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow