2024-05-27 21:37:49

 

개발 일지 28편

 

오늘 유니티 C# 문법 공부 중 변수 위에 헤더로 정리하는 것을 보고 이게 뭔가 싶어서 알아보다가

평소에 쓰던 SerializeField와 같이 인스펙터를 정리하고 속성을 추가하는 여러 어트리뷰트 중 하나라는 것을 알게 됐다.

알고보니 속성들이 꽤나 많은데 정리해보았다.

 

1.헤더[Header (string)]

 

이름이 Header 즉 머릿말, 제목 뜻이니까 무슨 느낌인지는 알겠는데 용도가 궁금했다.

알아보니 작업을 하다보면 인스펙터창을 수정해야될 일이 정말 많은데,

...이런식으로 되어있으면 정말 어지러울 것 같다. 그럴 때 이러한 인스펙터창을 깔끔하게 정리하도록 도와주는 것이

바로 이 'Header'의 역할인 것이다.

깔-끔해진 모습

2.[Space (float)]

글씨 간격이 너무 좁아 눈이 침침하다면 [Space (float)] 을 사용하면 된다.

 

예시 :

[Header ("Player Stats")]
public int health;
public float healthRegen;

[Space (10f)]
public int attackPoint;
public float attackSpeed;
public float attackDelay;

[Space (10f)]
public float moveSpeed;
public float rotSpeed;

[Space (10f)]
public float jumpAmount;
public bool isJumping;

 

여백이 들어가서 가독성이 아주 깔-꼼해진 것을 확인 할 수 있다.

 

3.Range (float, float)

변수의 값을 슬라이더 형식으로 표시하고, 최소 및 최대값을 정해주는 속성을 넣고 싶다면

[Range (float, float)]을 넣어주면 된다.

 

4. Multiline (int)

문자열을 작성하기 편하도록 라인의 수를 늘려주는 속성이라고 한다.

 

5.TextArea (int, int)

 

Multiline과 마찬가지로 라인의 수를 늘려주지만, 최소크기와 최대크기를 설정할 수 있고,

입력 박스가 Multiline처럼 변수 이름 우측이 아닌 아래에 생긴다.

 

6.SerializeField

기존에도 많이 썼지만, 다시 정리하자면

변수를 무분별하게 죄다 public으로 때려박는 건 좋지 않다고 한다.

그래서 항상 필요한것만 공개하고 그렇지 않을 때는 private으로 하는게 좋은데,

공개를 하지 않으면서 인스펙터에 표시하고 싶은 경우에 사용하면 되는 유용한 녀석이다.

 

7.ToolTip (string)

해당 변수 위에 커서를 올릴 경우 나타나는 툴팁을 설정하는 속성이다.

이건 팀 단위로 작업할 때 꽤나 유용하게 쓰일 것 같다.

 

8.HideInInspector

SerializeField와 반대로, public 필드 변수를 인스펙터에서 숨기는 속성이다.

변수를 외부로 공개해야하지만 굳이 인스펙터에 표시하고싶지 않다면 쓰면 될 것 같다.

 

9.System.Serializable

클래스 혹은 구조체를 인스펙터에 표시하는 속성이다.

 

여러 자료들을 하나의 클래스나 구조체로 묶는 건 좋은 방법이다. 깔끔해지기도하고 재사용 가능하니까.

거기에 인스펙터에 표시까지 된다? 안 쓸 이유가 없지.

인스펙터에는 접었다가 펼다 할수 있게 표시된다.

 

10. RequireComponent (Type)

해당 컴포넌트를 추가할 때 속성의 Type에 해당하는 컴포넌트가 없을 경우에 자동으로 추가해준다고 한다.

 

11.AddComponentMenu (string)

원하는 컴포넌트를 편리하게 추가할 수 있도록 지정해주는 속성이다.

 

12. ContextMenu  (String)

컴포넌트의 컨텍스트 메뉴에 함수를 추가해준다.

원하는 함수 위에 속성을 작성하면 컴포넌트에 우클릭을 할 시 함수가 표시되며 누를 경우 동작한다.

 

13. ContextMenuItem (string, string)

변수를 우클릭 했을 때 함수를 호출 할 수 있는 항목을 추가해준다.

첫번째 인자가 이름이고 두 번째가 호출할 함수의 이름이다.

매개변수는 못 넣는 것 같다.

 

14. ExcuteInEditMode

스크립트 내에 있는 콜백 함수들을 실행 (Play) 이 아닌 수정 (Edit) 모드에서도 동작하도록 하는 속성이다.

위 코드는 Edit Mode에서 인스펙터로 Resize Amount를 수정하면 자동적으로 스케일이 조정되는 코드이다.

 

이런 속성을 사용할 땐 에디터 모드에서만 동작하도록 전처리기를 달아주는 것도 좋은 방법이다.

괜히 런타임 때 불필요하게 성능을 낭비할 필요는 없다.

 

15. CreateAssetMenu

AddComponentMenu와 다르게 원하는 파일을 에셋 생성 메뉴에 추가시키는 속성이다.

ScriptableObject 만들때 자주 쓰이는 것 같다.

 

상황에 맞게 적재적소에 사용하면 유용하게 쓰일 것같다.

개발을 하면서 느끼는 것이 기능 구현도 중요하지만 협업을 위해, 또 미래의 나 자신을 위해 여러 자료들을 가독성 좋게 정리하는 것도 중요하다고 느꼈다.

이렇기에 이런 어트리뷰트들을 잘 사용하면서 스크립트에 적용하면 훨씬 깐지가 나지 않을까 싶다.