今天在干农活的是时候发现一个问题,untiy在将private字段序列化后在子类在inspector面板中也显示。作为菜鸟就很懵 哈哈哈,百度,Google 都没查到讲解。没办法只能重学基础。
进入主题
在untiy 中[SerializeField]的做用:在官方API中是这样的描述的:
强制Unity序列化一个私有字段。
Force Unity to serialize a private field.
Unity序列化您的脚本时,只会序列化公共字段。如果您还希望Unity序列化您的私有字段,则可以将SerializeField属性添加到这些字段。
When Unity serializes your scripts, it only serializes public fields. If you also want Unity to serialize your private fields you can add the SerializeField attribute to those fields.
unity会序列化所有脚本组件,重新加载的新程序集,并从序列化的版本重新创建脚本组件。该序列化是通过内部Unity序列化完成的:.net的序列化功能不支持。
接下来是C#继承
1.派生类是对基类的扩展,派生类可以添加新成员,但是不能移除已经继承的成员的定义
2.继承是可以传递的及A->B->C(->派生),则C类中同时继承了A、B的成员
3.构造函数和析构函数不能被继承,其他成员都被继承,基类中的成员的访问方式只能决定派生类能否访问它们
4.派生类如果定义了与继承而来的成员同名的新成员,那么就可以覆盖继承的成员,但是并不是删除了只是不能再访问这些成员。
5.类可以定义虚方法,虚方法及虚索引指示器,它的派生类能够重载这些成员,从而使类可以展示出多态性
6.C#是单一继承,及不能多重继承,但是可以通过接口来实现多重继承
Ok,通过上述的资料及偶的侧测试得出以下结论
1.父类中虽然以private修饰字段但是在子类中也存在这个字段只是不能访问,因此当父类中以[SerializeField]序列化后在子类地Inspector面板中也会显示。
可能有人会和我有同样的想法:如果写一个Button字段,在父类中监听方法。子类中关联一个新的Button会不会执行

测试:将两个脚本挂在物体上,同时在父类监听Button,运行Untiy点击按钮发现只有父类脚本关联的Button点击事件触发,子类地Button点击后无反应。

也就是说子类并不能触发父类的Button功能,相对而言只是父类通过序列化Button使其显示