[Unity] Property 인스펙터에 표시하기

2026. 4. 3. 12:49·게임개발/Unity

유니티에서 변수를 인스펙터에 표시하기 위해 [SerializeField], [Serializable] 등으로 직렬화를 진행한다.

대부분의 변수는 public으로 선언할 경우 자동으로 직렬화 되고, 커스텀 클래스의 경우 [Serializable] 붙여주면 된다.

 

그런데 인터페이스 등을 사용해서 프로퍼티로 관리하는 경우, 인스펙터에 노출시키려면 어떻게 해야할까?

 


 

프로퍼티는 단순히 [SerializeField]로 하면 인스펙터에 표시되지 않는다.

이때는 [field: SerializeField]를 사용해 인스펙터에 표시한다.

주의할 점은 자동 구현된 프로퍼티에만 사용 가능하다.

get, set 액세서를 직접 구현하는 경우에는 인스펙터 노출이 안된다.

public class A : MonoBehaviour
{
	[field: SerializedField] public int Health {get; set;} // 자동 구현된 프로퍼티 노출
	// private int _health;
	// [field: SerializedField] public int Health {get { _health}; set;} // 수동 구현, 노출 안됨!
}

 

보통의 변수는 [SerializeField]로 표시하면 저장된 .prefab에서 다음과 같이 작성되어있다.

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
...
MonoBehaviour:
...
  helath: 30
...

 

그러나 프로퍼티에 [field: SerializeField]를 사용하면 .prefab에 BackingField라는 이름으로 저장된다.

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
...
MonoBehaviour:
...
  <health>k__BackingField: 30
...

 

이를 이해하기 위해선 먼저 프로퍼티 개념을 알아야한다.

 

'프로퍼티'는 마치 공용 변수처럼 클래스 내에 존재하지만, 실제로는 '액세서' 라는 특수 메소드로 기능한다.

프로퍼티에는 private 필드에 접근하는 get과 set 메소드가 있으며, 이를 'Backing Field'라고 한다.

https://unity.com/how-to/formatting-best-practices-c-scripting-unity#properties

 

즉, 내부적으로 BackingField라는 private 필드가 존재하며

유니티에서 이를 직렬화하면 BackingField라는 이름으로 저장되는 것이다.

 

위에서 사용한 [ield: SerializeField]는 내부적으로 BackingField를 직렬화 하는 어트리뷰트다.

[SerializeField]로 대체할 수 있으며, 아래처럼 명시적으로 Backing Field를 클래스 안에 만들어주면 된다.

 

[SerializeField]
private float _helath; // backing field
public float Helath { get => _helath; set => _helath = value; } //property

 


 

그러나 매 변수마다 Backing Field를 만들기 번거롭다.

인터페이스를 사용할 때, 데이터 캡슐화를 위한 프로퍼티는 [field: SerializeField]를 쓰는게 유용할 것 같다.

 

참고사이트

더보기

https://discussions.unity.com/t/what-does-field-serializedfield-actually-do/929813/3

 

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/using-properties

 

Using Properties - C#

These examples illustrate using properties in C#. See how the get and set accessors implement read and write access and find out about uses for properties.

learn.microsoft.com

 

https://unity.com/kr/how-to/formatting-best-practices-c-scripting-unity

 

저작자표시 변경금지 (새창열림)

'게임개발 > Unity' 카테고리의 다른 글

[Unity] HDRP의 수동 카메라 렌더링 (Camera.Render() 사용금지)  (0) 2026.06.22
[Unity] 변수 이름을 바꿔도 인스펙터 값을 유지하는 법(FormerlySerializedAs)  (0) 2026.03.24
[Unity] Debug.Log 커스터마이징  (0) 2025.07.12
[Unity] 안쓰는 함수 멋지게 표현하기 (System.Obsolete)  (0) 2025.06.12
[Unity] NetworkVariable, INetworkSerializable Synchronization Problem  (0) 2025.06.05
'게임개발/Unity' 카테고리의 다른 글
  • [Unity] HDRP의 수동 카메라 렌더링 (Camera.Render() 사용금지)
  • [Unity] 변수 이름을 바꿔도 인스펙터 값을 유지하는 법(FormerlySerializedAs)
  • [Unity] Debug.Log 커스터마이징
  • [Unity] 안쓰는 함수 멋지게 표현하기 (System.Obsolete)
깜냥c
깜냥c
게임 개발/클라이언트/AI/PS/기타 연구
  • 깜냥c
    Choice Program
    깜냥c
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • 언어 (12)
        • C,C++ (10)
        • C# (1)
        • Python (1)
      • PS (20)
        • 백준 문제 (19)
        • 알고리즘 (1)
      • 인공지능 (2)
      • 게임제작 (7)
      • 게임개발 (22)
        • Unity (11)
        • Unreal Engine (9)
        • Godot Engine (1)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 블로그 소개
  • 링크

    • 김병장의 IT 블로그
    • 식품영양과 데이터사이언스
  • 공지사항

  • 인기 글

  • 태그

    BOJ
    UE5
    C언어
    입출력
    unity
    배낭 문제
    Godot
    C++
    Unreal
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
깜냥c
[Unity] Property 인스펙터에 표시하기
상단으로

티스토리툴바