안녕하세요. 박민성입니다. ☺️
오늘은 Unity의 Inspector Attribute 묶음 에 대해서 글을 쓰고자 합니다. 🤔
유니티 인스펙터 창을 [Header], [TextArea] 등으로 꾸밀 수 가 있습니다.
오늘은 그냥 패키지 느낌으로다가 한꺼번에 소개하고자 합니다.
1. Inspector Attribute란?
Unity에서는 필드 위에 Attribute를 붙여서 Inspector에서 어떻게 보일지를 바꿀 수 있습니다.
Attribute가 변수의 자료형 자체를 바꾸는 것은 아니고 Unity Editor가 해당 필드를 어떻게 보여주고 편집할지에 대한 추가 정보를 제공하는 것입니다.
2. [ Tooltip ]
[Tooltip("플레이어의 최대 체력")]
[SerializeField] private int maxHealth = 100;

Inspector에서 필드 이름 위에 마우스를 올렸을 때 설명을 보여줍니다.
변수 이름만으로 의미가 애매할 때? 값의 단위나 제한사항 설명할 때? 사용할 것 같습니다.
3. [ Header ]
[Header("Player Stats")]
[SerializeField]
private int health;
[SerializeField]
private int attack;

Inspector에 제목을 추가해서 필드를 구역별로 나눌 수 있습니다.
필드가 많아지면 더욱 더 유용해집니다.
[Header("Movement")]
[SerializeField] private float moveSpeed;
[Header("Combat")]
[SerializeField] private int attack;

4. [ Space ]
[SerializeField] private int health;
[Space]
[SerializeField] private int attack;

Inspector 필드 사이에 공백을 추가합니다.
[Space(50)]

공백 크기를 직접 지정해줄 수도 있습니다.
사용하면 서로 다른 설정 그룹을 시각적으로 구분과 Inspector 가독성 향상시킬 수 있습니다.
5. [ Range ]
[Range(0, 100)]
[SerializeField] private int health = 100;

숫자 필드를 슬라이더 형태로 바꾸고 범위를 제한하게 됩니다.
int형 float형 둘 다 가능합니다.
[Range(0f, 1f)]
[SerializeField] private float volume = 1f;

여기서 중요한 점은 Range는 Inspector에서 값을 입력할 때의 제한입니다!!
그렇기 때문에 값을 입력할 때는 값 제한이 되지만 코드로 막 Volume = 100 하는 것은 따로 코드로 막아야 합니다... (ex. Mathf.Clamp?)
6. [ Min ]
[Min(0)]
[SerializeField] private int gold;
Min은 최솟값만 제한합니다. 이렇게 코드를 작성하면 최소값은 0으로 하고 최대값은 제한 없이 할 수 있습니다.


마이너스를 입력하려고 해도 0으로 제정되게 됩니다.
Range는 최소값, 최대값 2개 다 제한하지만 Min은 최소값만 제한하는 것이 둘의 차이점입니다.
7. [ TextArea ]
[TextArea]
[SerializeField] private string description;

string 필드를 여러 줄 입력창으로 바꿔줍니다.
일반 문자열 필드는 한 줄 입력인데여 TextArea를 사용하면 여러 줄 입력이 가능하게 해줍니다.
[TextArea(3, 10)]
[SerializeField] private string description;
이런식으로 줄 최소, 최대를 지정할 수도 있습니다.
8. [ HideInInspector ]
public 필드지만 Inspector에서는 숨기고 싶을 때 사용합니다.
public int health;
보통 이렇게 public을 사용하면

이런식으로 인스펙터 창에 보이기 마련입니다. 하지만.
[HideInInspector]
public int health;
HideInInspector를 사용하면

이름 그대로 인스펙터 창에서 안 보이게 됩니다.
9. 내부적으로 어떻게 Inspector가 바뀔까요~?
[Range(0, 100)]
[SerializeField] private int health;
health라는 필드에 추가 메타데이터가 붙는 것입니다.
원래는 health라는 필드에
자료형: int 직렬화: O 이라는 정보가 있었다고 하면
거기서 추가로 Range(0, 100)이라는 정보를 필드가 담게 됩니다.
Unity Editor는 Inspector를 그릴 때 이 필드의 정보를 확인하고 그리게 됩니다.
그렇기 때문에 어트리뷰트는 그 필드에 추가 메타데이터를 담아서 Unity가 그것을 읽고
인스펙터 창에 띄운다고 생각하시면 될 것 같습니다.
오늘은 이상으로 Unity의 Inspector Attribute들을 알아보았습니다.
내부적으로 어떻게 동작하는지와 여러 가지 어트리뷰트들을 알게 되어..?
리마인드하게 되어 꽤 알찬 시간이었다고 생각합니다.
흠... 실무에서는 이런 어트리뷰트를 많이 사용할까? 조금 생각이 들기도 합니다.
오늘의 노래 추천은
One Direction - What Makes You Beautiful 이라는 노래입니다.
참... 노래가 풋풋하고 좋습니다 ㅎㅎ
내일은 더욱 알차게 보내고 작성해 보도록 하겠습니다.
봐주셔서 감사합니다. ☺️