Inspector는 프로퍼티가 아니라 필드를 읽습니다
Unity 직렬화는 C# 프로퍼티보다 필드를 기준으로 움직입니다. private 필드를 Inspector에 노출하려면 [SerializeField]를 붙이면 됩니다. public으로 열어 두는 것보다 코드에서 쓰는 범위를 좁힐 수 있어 실수도 줄어듭니다.
using UnityEngine;
public class EnemyTuning : MonoBehaviour
{
[SerializeField] private float moveSpeed = 3.5f;
public float MoveSpeed => moveSpeed;
}안 보이는 코드부터 지웁니다
[SerializeField]가 있어도 static, const, readonly 필드는 Inspector에 나타나지 않습니다. Dictionary, 다차원 배열처럼 Unity가 기본으로 직렬화하지 않는 타입도 마찬가지입니다. Console에 컴파일 오류가 하나라도 남아 있으면 Inspector가 예전 스크립트를 들고 있을 수 있으니 오류부터 0개로 만드세요.
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>();
}값을 바꿨는데 다시 돌아오면
필드 이름을 바꾼 뒤 기존 값이 사라졌다면 FormerlySerializedAs로 예전 이름을 알려 주세요. Prefab 인스턴스에서만 값이 달라지는지도 같이 봐야 합니다. 그 값은 스크립트 문제가 아니라 인스턴스 override일 수 있습니다.
using UnityEngine;
using UnityEngine.Serialization;
public class EnemyTuning : MonoBehaviour
{
[FormerlySerializedAs("speed")]
[SerializeField] private float moveSpeed = 3.5f;
}확인한 공식 문서Unity 직렬화 규칙 ↗