Inspector 직렬화 규칙을 단순화한 SVG 도식입니다. 실제 Unity 화면 캡처가 아닙니다.
Inspector 직렬화 규칙을 단순화한 SVG 도식입니다. 실제 Unity 화면 캡처가 아닙니다.

일반 직렬화는 필드를 대상으로 합니다

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 프로젝트에서 직접 재현한 결과는 아닙니다.

확인한 공식 문서Unity 직렬화 규칙 ↗