-
Unity | 직렬화(SerializeField)란?다시한번 개발자도전! 2026. 1. 23. 11:40
1. SerializeField란 ?
- public: 누구나 볼 수 있고, 유니티 인스펙터 창에도 나타남.
- private: 나만 볼 수 있고, 유니티 인스펙터 창에서 사라짐.
그런데 "다른 스크립트가 내 변수를 건드리는 건 싫지만, 유니티 에디터에서는 값을 조절하고 싶어!"라는 상황이 생김. 이때 쓰는 게 바로 [SerializeField].
2. 왜 '직렬화(Serialization)'라고 부를까?
- 유니티 도큐먼트에서 직렬화란 "객체를 유니티가 저장하고 나중에 재생성할 수 있는 형식으로 변환하는 과정" 라고 정의함.
- 우리가 인스펙터에서 값을 10에서 20으로 바꿈.
- 유니티가 이 20이라는 데이터를 직렬화해서 씬(Scene) 파일이나 프리팹 파일에 저장함.
- 게임을 실행하면 유니티가 저장된 파일을 읽어 다시 스크립트 변수에 넣어줌(역직렬화).
즉, [SerializeField]를 붙인다는 건 "이 변수는 유니티가 파일에 저장하고 관리할 대상이야!"라고 선언하는 것과 같음.
3. 왜 Public보다 SerializeField를 권장하는지
- Public의 문제점: 다른 스크립트에서 몬스터의 HP를 마음대로 수정할 수 있게 됨. 코드가 꼬이기 쉬움.
- SerializeField의 장점: 외부 접근은 차단하면서, 기획자나 개발자가 유니티 에디터에서 마우스로 수치를 조절(밸런스 조절)할 수 있음. 안전성과 편의성을 모두 잡는 방법임.
4. 직렬화가 되는 조건과 안 되는 조건
구분 직렬화 가능 여부 이유 public 변수 O 기본적으로 유니티가 관리함 private + [SerializeField] O 강제로 관리 대상에 포함시킴 static 변수 X 개별 오브젝트의 데이터가 아니기 때문 const, readonly X 값이 변하지 않는 상수이기 때문 일반적인 Class △ 클래스 위에 [System.Serializable]을 붙여야 함
5.적용법
using UnityEngine; public class Monster : MonoBehaviour { [SerializeField] //인스펙터에서 조절 가능함! private float attackPower = 15.5f; }'다시한번 개발자도전!' 카테고리의 다른 글
Unity | BFS(너비우선 탐색) 와 DFS(깊이우선 탐색) (0) 2026.02.11 Unity | 타일맵(TileMap)과 룰타일(RullTile) (0) 2026.02.02 Unity | 크로스페이드(Crossfade) 애니메이션 적용 (0) 2026.01.22 Unity | 반복자(IEnumerator) 와 열거자(IEnumerable) (0) 2026.01.21 Unity | 코루틴(Coroutine)과 Async/Await(Task) (0) 2026.01.21