[Unity] SerializeField, Header

Gee·2025년 2월 18일

[SerializeField]

  • [SerializeField]는 유니티의 특수한 속성으로, private이나 protected 필드도 유니티의 인스펙터 창에서 표시되도록 해준다.
  • 일반적으로 유니티 인스펙터는 public 필드만 보여주지만 [SerializeField]를 사용하면 private 필드도 인스펙터에서 수정할 수 있게 됨
[SerializeField] private float delay = 1f;
public float Delay { get => delay; set => delay = value; }
  • 이런식으로 [SerializeField]를 쓰면 private으로 선언되어 있지만 유니티의 인스펙터 창에서 값을 볼 수 있고 수정도 가능하다.

[SerializeField]를 사용하는 이유

  1. 캡슐화 유지
    • 변수는 private로 유지하면서 외부에서 값을 직접 수정하지 않도록 하고 싶을 때 유용함
    • 값을 인스펙터에서만 수정할 수 있도록 하여 외부 코드에서 불필요하게 값을 변경하지 않게 할 수 있음
  1. 유니티의 인스펙터에서 값 수정
    • 인스펙터에서 직접 값을 수정할 수 있기 때문에 코드에서 접근할 필요 없이 디자인 타임에 유용하게 사용할 수 있음
  1. 디버깅과 최적화
    • 디버깅을 쉽게 하고, 최적화에 도움을 주는 데 유용함.
    • 예를 들어 게임의 설정값이나 초기화 값 등을 인스펙터에서 쉽게 조정할 수 있음

[SerializeField]와 public의 차이점

public[SerializeField]
필드는 외부 코드에서 접근할 수 있음필드는 외부 코드에서 접근할 수 없음 (private)
인스펙터에서 값을 수정할 수 있음인스펙터에서 값을 수정할 수 있음
보안에 취약할 수 있음캡슐화 유지, 외부 코드에서 값 수정 방지

[Header("Group Name")]

  • [Header]는 유니티의 커스텀 속성 중 하나로, 인스펙터 창에서 해당 필드들을 그룹화하고 헤더를 추가해 시각적으로 구분할 수 있게 해줌.
  • 주로 인스펙터의 필드들을 그룹화하려는 목적에 사용된다.
[Header ("Attack Info")]

[SerializeField] private float delay = 1f;
public float Delay { get => delay; set => delay = value; }

[SerializeField] private float weaponSize = 1f;
public float WeaponSize { get => weaponSize; set => weaponSize = value; }
  • 이렇게 하면 "Attack Info"라는 제목이 유니티 인스펙터에 표시되고, 그 아래에 attackPower와 attackSpeed 같은 필드들이 그룹화되어 나온다.
-------------------------
| Attack Info           |  <-- Header 표시됨
-------------------------
| Attack Delay: 1f      |
| Attack WeaponSize: 1f |
-------------------------
  • 이런 식으로 헤더가 표시됨
  • 이렇게 그룹을 나누면 필드들을 보다 쉽게 구분할 수 있다.

기타 비슷한 속성들

  • [Tooltip("Description")] : 해당 필드에 마우스를 올렸을 때 툴팁을 띄워서 설명을 추가할 수 있음
  • [Range(min, max)] : 범위를 지정하여 인스펙터에서 슬라이더로 값을 조정할 수 있게 함
  • [Space] : 두 필드 사이에 공간을 추가하여 시각적으로 구분함
profile
...

0개의 댓글