Unity 에디터에서 프로젝트는 스크립트, 사운드, 메시 또는 광원 같은 기타 그래픽 요소를 포함하는 여러 게임 오브젝트로 구성됩니다. 인스펙터 창에는 현재 선택한 게임 오브젝트에 대한 상세 정보(연결된 모든 컴포넌트와 그 프로퍼티 등)가 표시되며 인스펙터 창을 사용하여 씬에 있는 게임 오브젝트의 기능을 수정할 수 있습니다.
이렇게 객체에 들어가는 속성 및 옵션을 스크립트에서 수정하지 않고 인스펙터 창에서 손쉽게 수정하기 위해서 유니티 Attribute를 사용합니다.
이름 그대로 AddComponent 메뉴에 해당 스크립트를 추가해줍니다.
그룹을 따로 지정이 가능하여 관리하기 편합니다.
[AddComponentMenu("지정할 경로/명칭")]
public calss 클래스명 : MonoBehaviour
{
}
ContextMenu는 컴포넌트 옆에 있는 톱니바퀴를 눌렀을 때 나타나는 메뉴를 말합니다.
이 메뉴에 항목을 추가할 수 있습니다.
ContextMenuItem은 컴포넌트에 추가되어 있는 멤버 변수에서 마우스 오른쪽 버튼을 누르면
나타나는 메뉴를 말합니다.
멤버 변수별로 기능을 만들어줄 때 유용합니다.
[ContextMenu("표시될 명칭")]
void 메서드명()
{
내용
}
[ContextMenuItem("표시될 명칭", "실행될 메서드")]
public string 변수명 = "";
void 메서드명()
{
내용
}
ExecuteInEditMode로 지정된 스크립트는 EditMode. 즉, 실행 상태가 아닌
편집 상태에서도 동작을 하게됩니다.
인스펙터 내에 타이틀을 달 수 있는 속성이다.
[Header("타이틀명")]
public으로 선언된 변수를 인스펙터에 표시되지 않도록 해줍니다.
하지만 이미 인스펙터에서 값이 설정되었다면 그 값이 유지됩니다.
[HideInInspector]
public int hide_value = 0;
장문의 문자열, 특히 줄 수가 많은 문자열을 작성하는데 유용한 속성입니다.
줄 수는 얼마든지 변경할 수 있습니다.
[Multiline(표시될 줄 수)]
public string test_string = "";
인스펙터에서 변수 값을 변경할 때 값을 직접 입력하는 방식이 아닌
슬라이드 바를 이용해서 변결할 수 있도록 도와줍니다.
슬라이드 바를 이용할 경우 범위도 제한할 수 있기 때문에 꽤나 유용합니다
[Range(0, 10)]
public int 변수명 = 0;
지정된 컴포넌트를 강제로 추가해 줍니다.
이렇게 추가된 컴포넌트는 호출한 컴포넌트가 제거되기 전까진 제거할 수 없습니다.
[RequireComponent(typeof(Rigidbody))]
public class 클래스명 : MonoBehaviour
{
}
private으로 지정된 변수들을 인스펙터에 표시해 줍니다.
스크립트 내부에서는 클래스들의 접근권한이 보호되는 것이 좋기 때문에
개인적으로 private으로 변수들을 선언하고 SerializeField를 적용하는 편입니다.
[SerializeField]
private int 변수명 = 0;
변수들 간의 간격을 조절해서 보기좋게 배치할 수 있습니다.
[Space(20)]
Multiline과 비슷한 속성입니다.
장문의 텍스트를 작성할 수 있는 공간을 마련해 줍니다.
인자로 최소크기와 최대크기가 전달됩니다.
[TextArea(최소 표시될 줄 수,최대 표시될 줄 수)]
public string 변수명 = "";
변수에 마우스 커서를 올렸을 때 표시되는 팁을 직접 작성해줄 수 있습니다.
에셋 패키지를 만들거나할 때 유용하게 사용할 수 있습니다.
[Tooltip("Tooltip Attribute Test")]
public int value = 0;
기본적으로 인스펙터에는 구조체나 클래스를 표시할 수 없습니다.
하지만 System.Serializable을 설정하면 구조체 또는 클래스 별로 편집이 가능합니다.
[System.Serializable]
public struct HpPack
{
public int max_hp;
public int current_hp;
}
System.Nonserialized는 HideInInspector 처럼 public으로 선언된 변수들을
인스펙터에서 숨겨주는 역활을 합니다.
다만 HideInInspector와는 달리 이전에 인스펙터에서 값을 수정했다고 하더라도
값을 유지하지 않고 스크립트에서 설정한 초기값이 적용됩니다.
[System.NonSerialized]
public int hide_value = 5;