[Unity/C#]Attribute

강동현·2023년 12월 30일
0

Unity/C#

목록 보기
7/26

Attribute

  • 유니티에선 컴퓨터가 읽는 주석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는 직렬화 되어있어 인스펙터 창에 보이지만, 비 직렬화되어 인스펙터 창에 보이지 않게 됨
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글