수색…


통사론

  • [AddComponentMenu (string menuName)]
  • [AddComponentMenu (string menuName, int order)]
  • [CanEditMultipleObjects]
  • [ContextMenuItem (문자열 이름, 문자열 함수)]
  • [ContextMenu (문자열 이름)]
  • [CustomEditor (유형 검사 유형)]
  • [CustomEditor (유형 검사 된 유형, bool editorForChildClasses)]
  • [CustomPropertyDrawer (유형 유형)]
  • [CustomPropertyDrawer (유형 유형, 부울 useForChildren)]
  • [DisallowMultipleComponent]
  • [그리기 기즈모 (GizmoType gizmo)]
  • [DrawGizmo (GizmoType 기즈모, 형식 drawnGizmoType)]
  • [ExecuteInEditMode]
  • [헤더 (문자열 헤더)]
  • [HideInInspector]
  • [InitializeOnLoad]
  • [InitializeOnLoadMethod]
  • [MenuItem (string itemName)]
  • [MenuItem (string itemName, bool isValidateFunction)]
  • [MenuItem (문자열 itemName, bool isValidateFunction, int 우선 순위)]
  • [여러 줄 (int 줄)]
  • [PreferenceItem (문자열 이름)]
  • [범위 (float min, float max)]
  • [RequireComponent (유형 유형)]
  • [RuntimeInitializeOnLoadMethod]
  • [RuntimeInitializeOnLoadMethod (RuntimeInitializeLoadType loadType)]
  • [SerializeField]
  • [공간 (플로트 높이)]
  • [TextArea (int minLines, int maxLines)]
  • [툴팁 (문자열 툴팁)]

비고

SerializeField

Unity의 직렬화 시스템을 사용하여 다음을 수행 할 수 있습니다.

  • 공용 비 정적 필드를 직렬화 할 수 있습니다 (직렬화 가능 유형)
  • [SerializeField] 특성으로 표시된 비공개 nonstatic 필드를 serialize 할 수 있습니다.
  • 정적 필드를 직렬화 할 수 없습니다.
  • 정적 속성을 직렬화 할 수 없습니다.

필드가 SerializeField 특성으로 표시되어 있어도 Unity가 serialize 할 수있는 형식 인 경우에만 특성이 부여됩니다.

  • UnityEngine.Object로부터 상속받은 모든 클래스 (예 : GameObject, Component, MonoBehaviour, Texture2D)
  • int, string, float, bool과 같은 모든 기본 데이터 유형
  • Vector2 / 3 / 4, Quaternion, Matrix4x4, Color, Rect, LayerMask와 같은 일부 기본 제공 유형
  • 직렬화 가능 형의 배열
  • 직렬화 가능 형의리스트
  • 열거 형
  • 구조물

공통 속성 속성

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

결과

필드 레이블 위에 마우스를 올려 놓을 때 :

결과 2


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

헤더 는 속성이있는 필드 위에 텍스트가 포함 된 굵은 라벨을 배치합니다. 이것은 그룹을 다른 레이블에 대해 눈에 띄게하기 위해 그룹에 레이블을 붙일 때 자주 사용됩니다.

[HideInInspector]
public string MyHiddenString;

HideInInspector 는 public 필드가 inspector에 표시되지 않도록합니다. 이 기능은 코드의 다른 부분에서 필드를 액세스 할 때 유용합니다.

[Multiline( 5 )]
public string MyMultilineString;

여러 라인의 지정된 수의 텍스트 상자를 만듭니다. 이 금액을 초과하면 상자를 확장하거나 텍스트를 줄 바꿈하지 않습니다.

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

TextArea 는 자동 줄 바꿈이있는 여러 줄 스타일의 텍스트와 텍스트가 할당 된 영역을 초과하는 경우 스크롤 막대를 허용합니다.

[Space( 15 )]
public int MyInt;

공간 은 검사원에게 이전 항목과 현재 항목 사이에 여분의 공간을 추가하도록 강제합니다 - 그룹 구분 및 분리에 유용합니다.

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

Range 는 최소값과 최대 값 사이의 숫자 값을 강제합니다. 이 속성은 min 및 max가 부동 소수점으로 지정된 경우에도 정수 및 복식에서도 작동합니다.

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

도구 설명은 필드의 레이블을 가리킬 때마다 추가 설명을 표시합니다.

[SerializeField]
private double myHiddenDouble;

SerializeField 는 Unity가 필드를 직렬화하도록 강제합니다 - 비공개 필드에 유용합니다.

구성 요소 속성

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

[DisallowMultipleComponent]

DisallowMultipleComponent 특성은 사용자가이 구성 요소의 여러 인스턴스를 하나의 GameObject에 추가 할 수 없도록합니다.

[RequireComponent( typeof( Rigidbody ) )]

RequireComponent 특성을 사용하면이 구성 요소가 GameObject에 추가 될 때 요구 사항으로 다른 구성 요소 (또는 그 이상)를 지정할 수 있습니다. 이 구성 요소를 GameObject에 추가하면 필수 구성 요소가 자동으로 추가되고 (아직없는 경우) 해당 구성 요소가 제거 될 때까지 제거 할 수 없습니다.

런타임 속성

[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 

ExecuteInEditMode 속성은 게임이 실행되지 않는 동안에도 Unity가이 스크립트의 마법 메서드를 강제로 실행하도록합니다.

기능이 재생 모드와 같이 끊임없이 호출되지는 않습니다.

  • 업데이트는 장면의 무언가가 변경되었을 때만 호출됩니다.
  • OnGUI는 게임보기가 이벤트를 받으면 호출됩니다.
  • OnRenderObject 및 기타 렌더링 콜백 함수는 장면 뷰 또는 게임 뷰의 모든 다시 그리기에서 호출됩니다.
[RuntimeInitializeOnLoadMethod]
private static void FooBar()

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

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

RuntimeInitializeOnLoadMethod 속성을 사용하면 게임에서 사용자가 상호 작용하지 않고 런타임을로드 할 때 런타임 클래스 메서드를 호출 할 수 있습니다.

장면로드 전후에 메소드를 호출 할 것인지 여부를 지정할 수 있습니다 (기본값은 이후 임). 이 속성을 사용하는 메소드의 실행 순서는 보증되지 않습니다.

메뉴 속성

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

[AddComponentMenu] 특성의 결과

결과 1

[ContextMenuItem] 특성의 결과

결과 2

[ContextMenu] 속성의 결과

결과 3


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

AddComponentMenu 특성을 사용하면 구성 요소 -> 스크립트 메뉴 대신 구성 요소 메뉴에 구성 요소를 둘 수 있습니다.

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

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

ContextMenuItem 특성을 사용하면 필드의 상황에 맞는 메뉴에 추가 할 수있는 함수를 정의 할 수 있습니다. 이 기능들은 선택시 실행됩니다.

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

ContextMenu 특성을 사용하면 구성 요소의 컨텍스트 메뉴에 추가 할 수있는 함수를 정의 할 수 있습니다.

편집기 속성

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

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

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

InitializeOnLoad 속성을 통해 사용자는 사용자 상호 작용없이 클래스를 초기화 할 수 있습니다. 이는 에디터가 시작될 때마다 발생하거나 재 컴파일 할 때 발생합니다. 정적 생성자는 다른 정적 함수보다 먼저 호출된다는 것을 보장합니다.

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

InitializeOnLoad 속성을 통해 사용자는 사용자 상호 작용없이 클래스를 초기화 할 수 있습니다. 이는 에디터가 시작될 때마다 발생하거나 재 컴파일 할 때 발생합니다. 이 속성을 사용하는 메소드의 실행 순서는 보증되지 않습니다.


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

[PreferenceItem] 속성의 결과

결과 2

[MenuItem] 특성의 결과

결과 3


[CanEditMultipleObjects]
public class AttributesExample : MonoBehaviour 

CanEditMultipleObjects 특성을 사용하면 여러 GameObjects를 통해 구성 요소의 값을 편집 할 수 있습니다. 이 구성 요소가 없으면 여러 게임 객체를 선택할 때 구성 요소가 정상적으로 표시되지 않지만 대신 "다중 객체 편집이 지원되지 않음"메시지가 표시됩니다.

이 속성은 다중 편집을 지원하는 사용자 정의 편집기 용입니다. 비 사용자 편집기는 자동으로 다중 편집을 지원합니다.

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

PreferenceItem 속성을 사용하면 Unity의 환경 설정 메뉴에서 추가 항목을 만들 수 있습니다. 수신 방법은 정적으로 사용되어야합니다.

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

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

MenuItem 특성을 사용하면 함수를 실행하기 위해 사용자 지정 메뉴 항목을 만들 수 있습니다. 이 예제는 함수의 실행을 막기 위해 (항상 false를 반환하는) validator 함수도 사용합니다.


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

CustomEditor 특성을 사용하면 구성 요소에 대한 사용자 지정 편집기를 만들 수 있습니다. 이 편집기는 검사기에서 구성 요소를 그리는 데 사용되며 Editor 클래스에서 파생되어야합니다.

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

CustomPropertyDrawer 속성을 사용하면 속성에서 사용자 정의 속성 서랍을 만들 수 있습니다. 이 서랍을 사용자 정의 데이터 유형에 사용할 수 있으므로 관리자가 해당 서랍을 서체에서 사용할 수 있습니다.

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

DrawGizmo 특성을 사용하면 구성 요소에 대한 사용자 지정 장치를 그릴 수 있습니다. 이러한 장치는 장면 뷰에 그려집니다. DrawGizmo 특성의 GizmoType 매개 변수를 사용하여 기즈모를 그릴시기를 결정할 수 있습니다.

수신 방법에는 두 개의 매개 변수가 필요합니다. 첫 번째는 기즈모를 그리는 구성 요소이고 두 번째는 기즈모가 필요한 객체가있는 상태입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow