[유니티] 자주 사용하는 애트리뷰트(Attribute) 정리
유니티를 이용하다 보면 에디터를 커스텀 하고 싶을때가 있습니다.
하지만 에디터 코드를 작성하는건 쉽지가 않죠
그럴때 유니티에서 제공하는 Attribute를 이용하면 에디터를 커스텀하는데 있어 편하게 할 수 있습니다.
그 중에 자주 이용되는 Attribute를 정리해보았습니다.
요약 정리
애트리뷰트 | 설명 |
SerializeField | private, protected 변수를 인스펙터에 표시 |
Serializable | 커스텀 클래스를 인스펙터에 표시 |
Header | 변수위에 타이틀을 설정해 카테고리 분류 가능, 인스펙터 외관 정리에 사용 |
HideInInspector | public 변수를 인스펙터에서 숨길수 있음 |
RequireComponent | 필수 컴포넌트를 추가 할 수 있음 |
Range | int, float 변수를 슬라이드바로 표시하고 범위를 제한함 |
Space | 변수와 변수 사이에 간격 주기 |
CreateAssetMenu | ScriptableObject Asset을 생성할때 사용하는 메뉴를 추가 할 때 사용 |
MenuItem | 임의의 함수 ( static ) 실행을 메뉴 항목으로 추가 |
ContextMenu | 임의의 함수 ( non-static ) 실행을 컴포넌트 톱니 메뉴에 추가 |
AddComponentMenu | 인스펙터의 AddComponent 메뉴 항목으로 컴포넌트를 추가 할때 사용 |
ExecuteInEditMode | 에디터가 플레이 모드가 아니더라도 컴포넌트가 동작하도록 할때 사용 |
Multiline | string 변수를 여러줄 입력 가능하게 만들때 사용 |
TextArea | Multiline과 비슷, 폭에 맞춰 자동으로 줄바꿈과 슬라이드바 표시 |
Tooltip | 인스펙터에 표시되는 변수에 설명을 추가 할때 사용 |
상세 설명
SerializeField
인스펙터에 비공개 ( privat, protected ) 변수를 노출시키는데 사용됨
public class AttributeExample : MonoBehaviour
{
[SerializeField]
private int TestA;
[SerializeField]
protected float TestB;
}
Serializable
커스텀 클래스,구조체를 인스펙터에 표시하고 편집 가능하도록 만듬 ( 직렬화 되어야 표시되고 편집이 가능해짐 )
public class AttributeExample : MonoBehaviour
{
public TestClassA ClassA;
}
// 커스텀 클래스
[Serializable]
public class TestClassA
{
public int A;
public float B;
public string C;
}
Header
인스펙터의 외관을 정리하는데 사용
인스펙터 변수위에 타이틀을 설정 할 수 있고 인스펙터에 타이틀을 설정해 변수들을 정리 할 수 있음
public class AttributeExample : MonoBehaviour
{
[Header("Field")]
[SerializeField]
private int TestA;
[SerializeField]
protected float TestB;
[Header("Class")]
public TestClassA ClassA;
public TestClassA ClassB;
}
HideInInspector
public 변수를 인스펙터에 표시되지 않도록 숨김
인스펙터에 표시되는 변수를 더이상 표시되지 않도록 지정하는데 사용됨
public class AttributeExample : MonoBehaviour
{
[HideInInspector]
public string HideA;
}
RequireComponent
클래스위에 사용되는 Attribute로 지정한 컴포넌트와 종속 관계를 만들어 이 Attribute를 사용한 클래스를 추가 할때 자동으로 지정한 컴포넌트가 추가되도록함
특정 컴포넌트가 꼭 필요한 스크립트를 작성할때 사용
컴포넌트를 게임오브젝트에 추가 할때 같이 추가되도록 설정 할 수 있음
필수 설정한 컴포넌트를 Attribute 적용된 컴포넌트가 남아 있는 상태에서 제거하려고 하면 위와 같은 메세지가 뜬다.
[RequireComponent(typeof(Rigidbody))]
public class RequireExample : MonoBehaviour
{
}
Range
int, float 등의 타입 변수에 사용되고 변수의 범위를 제한하고 인스펙터에 슬라이드 바로 표시되도록함
public class AttributeExample : MonoBehaviour
{
[Range(0, 10)]
public int RangeA;
[Range(-20.0f, 10.0f)]
public float RangeB;
}
Space
인스펙터에 표시되는 변수들 사이에 간격을 설정할때 사용됨
public class AttributeExample : MonoBehaviour
{
[SerializeField]
private int TestA;
[SerializeField]
protected float TestB;
[Space(100)]
public TestClassA ClassA;
public TestClassA ClassB;
[Space(300)]
[Range(0, 10)]
public int RangeA;
[Range(-20.0f, 10.0f)]
public float RangeB;
}
CreateAssetMenu
ScriptableObject에서 파생된 유형의 asset 파일을 만드는 메뉴를 추가 할때 사용함
메뉴는 에디터 상단의 Assets라는 메뉴의 Create 항목 안 부분을말함
이 항목은 아래의 항목과 같은 항목
[CreateAssetMenu(fileName ="Example", menuName ="Tools/Example")]
public class CreateAssetMenuExample : ScriptableObject
{
public int AA;
public string BB;
}
MenuItem
메뉴바를 추가하는 기능으로 static 함수를 메뉴바에 추가 시켜 실행 시키도록 할 수 있음
public class AttributeExample : MonoBehaviour
{
[MenuItem("MyMenu/Test")]
static void MenuTest()
{
Debug.Log("Test!!!");
}
}
ContextMenu
컴포넌트 이름 부분을 오른쪽 마우스 클릭하거나 톱니모양(점3개) 버튼을 클릭해 나오는 목록에 함수를 실행 시키는 메뉴를 추가 할 수 있음
함수는 static 함수가 아니여도됨
public class AttributeExample : MonoBehaviour
{
[ContextMenu("Context Test")]
void ContextMenuTest()
{
Debug.Log("Context Test!!!");
}
}
AddComponentMenu
인스펙터 창의 AddComponent 메뉴에 이 컴포넌트를 메뉴항목으로 추가 할때 사용
메뉴항목을 추가할때 자기가 원하는 카테고리로 분류해 항목을 추가 할 수 있다.
[AddComponentMenu("MyComponent/AttributeExample")]
public class AttributeExample : MonoBehaviour
{
}
ExecuteInEditMode
지정된 컴포넌트는 EditMode에서도 동작 되도록 할때 사용
에디터에서 플레이 시키지 않아도 지정된 컴포넌트의 주요 함수가 호출됨
[ExecuteInEditMode]
public class EditModeExample : MonoBehaviour
{
void Awake()
{
Debug.Log("Awake");
}
void Start()
{
Debug.Log("Start");
}
void Update()
{
Debug.Log("Update");
}
}
Mutiline
string 타입의 변수에 사용됨
기본적으로 TextField는 한줄짜리로 인스펙터에 표시되지만 이 Attribute를 사용하면 여러줄의 텍스트 박스로 표시합니다.
public class AttributeExample : MonoBehaviour
{
public string NoMultilineText;
[Multiline(5)]
public string MultilineText;
}
TextArea
string 타입의 변수에 사용됨
Multiline과 크게 다르지 않지만 폭에 맞추어 자동으로 줄바꿈이 되고 스크롤바를 표시합니다.
public class AttributeExample : MonoBehaviour
{
[TextArea(5, 7)]
public string TextAreaText;
[Multiline(5)]
public string MultilineText;
}
Tooltip
변수, 프로퍼티 등에 설명을 인스펙터에서 확인 할 수 있도록 하기 위해 사용
설명은 변수명에 마우스 커서를 올렸을때 표시됨
public class AttributeExample : MonoBehaviour
{
[Tooltip("Int형 변수")]
public int AA;
}
'유니티 > 커스텀 에디터' 카테고리의 다른 글
유니티 하이어라키에 활성화/비활성화 버튼 넣기 (0) | 2021.01.31 |
---|
댓글