在untiy中 遇到 [SerializeField]与继承的问题

今天在干农活的是时候发现一个问题,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使其显示

你可能感兴趣的:(在untiy中 遇到 [SerializeField]与继承的问题)