- 유니티에선 컴퓨터가 읽는 주석인 Attribute를 지원
- Unity에서 자주 사용하는 Attribute만을 정리
1. [SerializeField]
- private, protected 변수를 직렬화해 인스펙터에 표시
- 다른 클래스에서 접근 불가
[SerializeField] private int TestA; [SerializeField] protected float TestB;
2. [System.Serializable]
- 커스텀 클래스(사용자 정의 클래스), 구조체를 직렬화해 인스펙터에 표시
public class TestClass{ public int A; public float B; public string C; } [System.Serializable] public class Test : MonoBehaviour { public TestClass Class; } //int는 Struct 형태의 구조체 //인스펙터 창에 보이기 위해선 직렬화되어야 함 //int는 직렬화 되어있어 인스펙터 창에 보이지만, 비 직렬화되어 인스펙터 창에 보이지 않게 됨
3. [Header]
- 변수 위 타이틀 설정 -> 카테고리 분류 & 인스펙터 외관 정리에 사용
public class TestClass : MonoBehaviour { [Header("Field")] [SerializeField] private int Test1; [SerializeField] protected float Test2; [Header("Class")] public TestClass1 Class1; public TestClass2 Class2; }
4. [HideInInspector]
- public 변수를 인스펙터에서 숨김
5. [RequireComponent]
- 특정 컴포넌트에 종속되는 컴포넌트(클래스)로 지정
- 특정 컴포넌트 추가 시, 자동으로 컴포넌트 추가
- 컴포넌트(클래스)를 특정 컴포넌트 삭제 전에 삭제 불가
[RequireComponent(typeof(Rigidbody))] public class RequireExample : MonoBehaviour { }
6. [Range]
- int, float 변수를 슬라이드바로 표시하고 범위를 제한
[Range(0, 10)] public int Range1; [Range(-10.0f, 10.0f)] public float Range2;
7. [Space]
- 간격(공백) 주기
[Space(100)] [Space(300)]
8. [CreateAssetMenu]
- ScriptableObject Asset을 생성할때 사용하는 메뉴를 추가 할 때 사용
[CreateAssetMenu(fileName ="Example", menuName ="Tools/Example")] public class CreateAssetMenuExample : ScriptableObject { public int A; public float B; }
9. [MenuItem]
- 임의의 static 함수 실행을 메뉴 항목으로 추가
public class AttributeExample : MonoBehaviour { [MenuItem("MyMenu/Test")] static void MenuTest() { Debug.Log("Test!!!"); } }
10. [ContextMenu]
- 임의의 함수 ( non-static ) 실행을 컴포넌트 톱니 메뉴에 추가
public class AttributeExample : MonoBehaviour { [ContextMenu("Context Test")] void ContextMenuTest() { Debug.Log("Context Test!!!"); } }
11. [AddComponentMenu]
- 인스펙터의 AddComponent 메뉴 항목으로 컴포넌트를 추가 할때 분류하여 적용하는 용도
[AddComponentMenu("MyComponent/AttributeExample")] public class AttributeExample : MonoBehaviour { }
12. [ExecuteInEditMode]
- 에디터가 플레이 모드가 아니더라도 컴포넌트가 동작하도록 할때 사용
- Awake나 Start 함수는 컴포넌트가 부착될때 호출
- Update 함수는 컴포넌트가 부착된 게임 오브젝트에 변화가 생길때 호출
[ExecuteInEditMode] public class EditModeExample : MonoBehaviour { void Awake() { Debug.Log("Awake"); } void Start() { Debug.Log("Start"); } void Update() { Debug.Log("Update"); } }
13. [Multiline]
- string 변수를 여러줄 입력 가능하게 만들때 사용
- 3줄까지 가능
public class AttributeExample : MonoBehaviour { public string NoMultilineText; [Multiline(5)] public string MultilineText; }
14. [TextArea]
- Multiline과 유사(진화)
- 폭에 맞춰 자동으로 줄바꿈과 슬라이드바 표시
- 3줄 이상 10줄 이하
public class AttributeExample : MonoBehaviour { [TextArea(5, 7)] public string TextAreaText; }
15. [Tooltip]
- 인스펙터에 표시되는 변수에 설명을 추가 할때 사용
- 설명은 변수 위에 마우스 커서를 올린 경우 표기
public class AttributeExample : MonoBehaviour { [Tooltip("Int형 변수")] public int A; }
16. [System.Obsolete]
- 더이상 사용되지 않는 함수를 표기할 때 사용
- 함수 사용시 경고문구를 출력
- 단 플레이는 가능(Deprecated)
17. [HelpURL(url)]
- 참고 자료 url 첨부
- 컴포넌트 창에 ?를 누르면 링크 연결
[HelpURL("https://www.google/co/kr/")] public class AttributeManager : MonoBehaviour { //... }
18. [ColorUsage(bool alpha, bool hdr)]
- 컴포넌트 상 색상표에서 Alpha(투명도) 제외
[ColorUsage(false)]//alpha 값 통제 public Color color; [ColorUsage(true, true)]//HDR 사용 여부 public Color color;
19. [DisallowMultipleComponent]
- 한 오브젝트에 여러 개의 해당 스크립트 컴포넌트 부착 불가
20. [System.NonSerialized]
- 직렬화 해제
[System.NonSerialized] public int value; //int는 Struct 형태의 구조체 //인스펙터 창에 보이기 위해선 직렬화되어야 함 //int는 직렬화 되어있어 인스펙터 창에 보이지만, 비 직렬화되어 인스펙터 창에 보이지 않게 됨