Szukaj…


Składnia

  • [AddComponentMenu (ciąg menuName)]
  • [AddComponentMenu (string menuName, int int)]
  • [CanEditMultipleObjects]
  • [ContextMenuItem (nazwa ciągu, funkcja ciągu)]
  • [ContextMenu (nazwa ciągu)]
  • [CustomEditor (Type inspectedType)]
  • [CustomEditor (Type inspectedType, bool editorForChildClasses)]
  • [CustomPropertyDrawer (typ typu)]
  • [CustomPropertyDrawer (typ typu, użycie boolForChildren)]
  • [DisallowMultipleComponent]
  • [DrawGizmo (GizmoType gizmo)]
  • [DrawGizmo (GizmoType gizmo, Type drawnGizmoType)]
  • [ExecuteInEditMode]
  • [Nagłówek (nagłówek ciągu)]
  • [HideInInspector]
  • [InitializeOnLoad]
  • [InitializeOnLoadMethod]
  • [MenuItem (string itemName)]
  • [MenuItem (string itemName, bool isValidateFunction)]
  • [MenuItem (ciąg itemName, bool isValidateFunction, int priorytet)]
  • [Multiline (int lines)]
  • [PreferenceItem (nazwa ciągu)]
  • [Zakres (liczba zmiennoprzecinkowa, liczba zmiennoprzecinkowa)]
  • [RequireComponent (typ typu)]
  • [RuntimeInitializeOnLoadMethod]
  • [RuntimeInitializeOnLoadMethod (RuntimeInitializeLoadType loadType)]
  • [SerializeField]
  • [Space (wysokość pływaka)]
  • [TextArea (int minLines, int maxLines)]
  • [Podpowiedź (podpowiedź ciągu)]

Uwagi

SerializeField

System serializacji Unity może być wykorzystywany do wykonywania następujących czynności:

  • Może serializować publiczne pola niestatyczne (typów możliwych do serializacji)
  • Może serializować niepubliczne pola niestatyczne oznaczone atrybutem [SerializeField]
  • Nie można serializować pól statycznych
  • Nie można serializować właściwości statycznych

Twoje pole, nawet jeśli oznaczone atrybutem SerializeField, zostanie przypisane tylko wtedy, gdy jest typu, który Unity może serializować, a mianowicie:

  • Wszystkie klasy dziedziczące po UnityEngine.Object (np. GameObject, Component, MonoBehaviour, Texture2D)
  • Wszystkie podstawowe typy danych, takie jak int, string, float, bool
  • Niektóre wbudowane typy, takie jak Vector2 / 3/4, Quaternion, Matrix4x4, Color, Rect, LayerMask
  • Tablice typu możliwego do serializacji
  • Lista typu możliwego do serializacji
  • Enums
  • Struktury

Typowe atrybuty inspektora

[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;

Wynik

Po najechaniu kursorem na etykietę pola:

Wynik 2


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

Nagłówek umieszcza pogrubioną etykietę zawierającą tekst nad przypisanym polem. Jest to często używane do etykietowania grup, aby wyróżniały się na tle innych etykiet.

[HideInInspector]
public string MyHiddenString;

HideInInspector zapobiega wyświetlaniu pól publicznych w inspektorze. Jest to przydatne do uzyskiwania dostępu do pól z innych części kodu, w których nie są one w żaden inny sposób widoczne ani zmienne.

[Multiline( 5 )]
public string MyMultilineString;

Wielowierszowy tworzy pole tekstowe z określoną liczbą wierszy. Przekroczenie tej kwoty nie spowoduje rozszerzenia pola ani zawinięcia tekstu.

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

TextArea zezwala na tekst w stylu wielowierszowym z automatycznym zawijaniem słów i paskami przewijania, jeśli tekst przekracza przydzielony obszar.

[Space( 15 )]
public int MyInt;

Spacja zmusza inspektora do dodania dodatkowej przestrzeni między poprzednimi i bieżącymi elementami - przydatna przy rozróżnianiu i rozdzielaniu grup.

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

Zakres wymusza wartość liczbową od minimum do maksimum. Ten atrybut działa również na liczbach całkowitych i podwójnych, mimo że min i max są określone jako zmiennoprzecinkowe.

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

Etykietka pokazuje dodatkowy opis za każdym razem, gdy najedziesz kursorem na pole.

[SerializeField]
private double myHiddenDouble;

SerializeField zmusza Unity do serializacji pola - przydatne w przypadku pól prywatnych.

Atrybuty komponentów

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

[DisallowMultipleComponent]

Atrybut DisallowMultipleComponent zapobiega dodawaniu wielu wystąpień tego składnika do jednego GameObject.

[RequireComponent( typeof( Rigidbody ) )]

Atrybut RequireComponent pozwala określić inny komponent (lub więcej) jako wymagania dotyczące dodawania tego komponentu do GameObject. Po dodaniu tego komponentu do GameObject wymagane komponenty zostaną automatycznie dodane (jeśli jeszcze nie są obecne) i nie będzie można usunąć tych komponentów, dopóki nie zostanie usunięty ten, który ich wymaga.

Atrybuty środowiska wykonawczego

[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 

Atrybut ExecuteInEditMode zmusza Unity do wykonywania magicznych metod tego skryptu, nawet gdy gra nie jest uruchomiona.

Funkcje nie są ciągle wywoływane, jak w trybie odtwarzania

  • Aktualizacja jest wywoływana tylko wtedy, gdy coś w scenie się zmieniło.
  • OnGUI jest wywoływany, gdy Widok Gry otrzyma Zdarzenie.
  • OnRenderObject i inne funkcje wywołania zwrotnego renderowania są wywoływane przy każdym odmalowaniu Widoku sceny lub Widoku gry.
[RuntimeInitializeOnLoadMethod]
private static void FooBar()

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

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

Atrybut RuntimeInitializeOnLoadMethod umożliwia wywoływanie metody klasy środowiska wykonawczego, gdy gra ładuje środowisko uruchomieniowe, bez żadnej interakcji ze strony użytkownika.

Możesz określić, czy chcesz, aby metoda była wywoływana przed czy po załadowaniu sceny (domyślnie jest po). Kolejność wykonywania nie jest gwarantowana dla metod wykorzystujących ten atrybut.

Atrybuty menu

[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() 
    {
        [...]
    }
}

Wynik atrybutu [AddComponentMenu]

Wynik 1

Wynik atrybutu [ContextMenuItem]

Wynik 2

Wynik atrybutu [ContextMenu]

Wynik 3


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

Atrybut AddComponentMenu pozwala umieścić komponent w dowolnym miejscu w menu Component zamiast w menu Component-> Scripts.

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

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

Atrybut ContextMenuItem pozwala zdefiniować funkcje, które można dodać do menu kontekstowego pola. Funkcje te zostaną wykonane po wybraniu.

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

Atrybut ContextMenu pozwala zdefiniować funkcje, które można dodać do menu kontekstowego komponentu.

Atrybuty edytora

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

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

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

Atrybut InitializeOnLoad pozwala użytkownikowi zainicjować klasę bez interakcji użytkownika. Dzieje się tak przy każdym uruchomieniu edytora lub przy ponownej kompilacji. Konstruktor statyczny gwarantuje, że zostanie to wywołane przed innymi funkcjami statycznymi.

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

Atrybut InitializeOnLoad pozwala użytkownikowi zainicjować klasę bez interakcji użytkownika. Dzieje się tak przy każdym uruchomieniu edytora lub przy ponownej kompilacji. Kolejność wykonywania nie jest gwarantowana dla metod wykorzystujących ten atrybut.


[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;
    }
}

Wynik atrybutu [PreferenceItem]

Wynik 2

Wynik atrybutu [MenuItem]

Wynik 3


[CanEditMultipleObjects]
public class AttributesExample : MonoBehaviour 

Atrybut CanEditMultipleObjects umożliwia edytowanie wartości z komponentu w wielu obiektach GameObjects. Bez tego komponentu nie zobaczysz, jak wygląda on normalnie podczas wybierania wielu GameObjects, ale zamiast tego zobaczysz komunikat „Edycja wielu obiektów nie jest obsługiwana”

Ten atrybut jest przeznaczony dla edytorów niestandardowych obsługujących edycję wielokrotną. Edytory niestandardowe automatycznie obsługują edycję wielokrotną.

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

Atrybut PreferenceItem pozwala ci stworzyć dodatkowy element w menu preferencji Unity. Metoda odbiorcza musi być statyczna, aby mogła zostać użyta.

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

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

Atrybut MenuItem umożliwia tworzenie niestandardowych elementów menu w celu wykonania funkcji. W tym przykładzie użyto również funkcji sprawdzania poprawności (która zawsze zwraca wartość false), aby zapobiec wykonaniu funkcji.


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

Atrybut CustomEditor pozwala tworzyć niestandardowe edytory dla komponentów. Te edytory będą używane do rysowania komponentu w inspektorze i będą musiały pochodzić z klasy Editor.

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

Atrybut CustomPropertyDrawer umożliwia utworzenie w inspektorze szuflady właściwości niestandardowych. Możesz użyć tych szuflad do niestandardowych typów danych, aby były widoczne w inspektorze.

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

Atrybut DrawGizmo umożliwia rysowanie niestandardowych gadżetów dla komponentów. Te gadżety zostaną narysowane w Widoku sceny. Możesz zdecydować, kiedy narysować Gizmo, używając parametru GizmoType w atrybucie DrawGizmo.

Metoda odbioru wymaga dwóch parametrów, pierwszy to komponent do narysowania gizmo, a drugi to stan, w którym znajduje się obiekt, który potrzebuje narysowanego gizmo.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow