일반 직렬화는 필드를 대상으로 합니다
Unity의 일반 직렬화는 프로퍼티 자체가 아니라 필드를 대상으로 합니다. private 필드를 Inspector에 노출하려면 [SerializeField]를 붙이면 됩니다. 명시적인 backing field에는 같은 필드 규칙이 적용됩니다. 자동 프로퍼티는 hot reload 중 직렬화될 수 있는 예외가 있으므로, 저장할 게임 데이터는 명시적인 필드로 두는 편이 분명합니다.
using UnityEngine;
public class EnemyTuning : MonoBehaviour
{
[SerializeField] private float moveSpeed = 3.5f;
public float MoveSpeed => moveSpeed;
}지원하지 않는 필드부터 걷어냅니다
[SerializeField]가 있어도 static, const, readonly 필드는 일반적인 Inspector 직렬화 대상이 아닙니다. Dictionary와 다차원 배열처럼 Unity가 기본으로 직렬화하지 않는 컨테이너도 그대로는 보이지 않습니다. 컴파일이 실패하면 변경한 어셈블리와 필드 정의가 로드되지 않을 수 있으니, Inspector를 판단하기 전에 Console의 컴파일 오류부터 없애세요.
using System;
using System.Collections.Generic;
using UnityEngine;
[Serializable]
public class Wave
{
public int count = 4;
public float interval = 1.5f;
}
public class SpawnConfig : MonoBehaviour
{
[SerializeField] private Wave firstWave;
[SerializeField] private List<Wave> waves = new List<Wave>();
}값이 다른 위치에 저장됐는지 확인합니다
필드가 보이는데 값만 예상과 다르다면 코드 선언보다 저장 위치를 먼저 구분하세요. Prefab 에셋의 기본값, 씬에 놓인 인스턴스의 override, Play Mode에서만 바뀐 런타임 값은 서로 같은 값이 아닙니다. 한 인스턴스에서만 값이 다르면 누락된 필드가 아니라 Prefab override일 수 있습니다.
공식 문서 대조
검증일
Unity 6 공식 문서와 코드 경로를 대조했습니다. 별도 Unity 프로젝트에서 직접 재현한 결과는 아닙니다.