带自定义逻辑的C#属性用[field:SerializeField]无法在Unity Inspector显示求助
Unity 自定义逻辑属性序列化无需自定义编辑器的解决方法
当你手动维护私有后台字段(比如_bar)实现带自定义逻辑的属性时,[field: SerializeField]不再适用——这个特性仅针对编译器自动生成的自动属性后台字段。无需自定义编辑器,直接给你的私有后台字段加[SerializeField]就能解决问题:
[SerializeField] private int _bar; public int bar { get { return _bar; } set { _bar = value; DoThing(); } }
补充说明:
- Unity会序列化
_bar并在Inspector面板中显示它,你可直接在面板修改值。 - 外部脚本仍只能通过
bar属性读写,完全保留封装性。 - 无论在Inspector中修改
_bar值,还是通过代码设置bar属性,属性set块中的自定义逻辑(比如DoThing())都会正常触发。
如果想让Inspector显示更友好(比如去掉字段名下划线),可搭配[Tooltip]属性优化:
[SerializeField, Tooltip("带自定义逻辑的Bar属性")] private int _bar;
内容的提问来源于stack exchange,提问作者Idyia
相关产品推荐
相关产品推荐

