unity背包为啥要定义基类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity背包为啥要定义基类相关的知识,希望对你有一定的参考价值。

原因是:基类通过虚函数可以对多个子类相似的功能实现统一管理。例子:A为基类,B、C为A的同级子类。virtual只需在基类中标识一次,子类无需重复标识。class Avirtual void display()cout<<"是A"<<endl;class B:public Avoid display()cout<<"是B"<<endl;class C:public Avoid display()cout<<"是C"<<endl;void display(A s)//以A类型作为参数的顶层函数,不同于类中的成员函数 s.display();//调用对象s的成员函数int main() A x1; B x2; C x3; display(x1);//显示:是A。 display(x2);//参数x2向上转换为x1类型,显示:是B。display(x3);//参数x3向上转换为x1类型,显示:是C。通过显示可以注意到以下两点:1、尽管在顶层函数的定义中是以基类A作为其参数,但却能接受基类A的任一子类作为其参数。事实上,这是基于自动向上类型转换,即子类转换为它的父类型。2、虽然子类转换成了它的父类型,但却可正确调用属于子类而不属于父类的成员函数。这是虚函数的功劳。这样,通过设计一个以基类型作为参数的顶层函数,就可实现基类及其所有子类相似功能的统一管理,而不用理会不同对象自身的类型。 参考技术A 这是一个语言的规范,也算是一个工作流程。你需要遵循这个流程才可以顺利完成开发工作。至于很多细节的用法这里就不多说了,你可以去paws3d上看

Unity脚本类为啥要尽量避免继承MonoBehaviour类

unity3d文档里虽然说所有脚本继承MonoBehaviour类,但是你如果想自定义类,就可以不用继承MonoBehaviour,但是可以类只能调用其中的方法和属性,无法拖到场景的物体中使用。
MonoBehaviour里面的几十方法比如
Start(), Awake(), Update(), FixedUpdate(), OnGUI(),这几个方法不管你用哪一个,必须要继承MonoBehaviour
用不用MonoBehaviour关键看要实现什么功能和属性,如果你的类不需要引擎提供的初始化,各种物理,渲染,着色器的回调,最好不要继承MonoBehaviour,游戏是需要优化节约资源的,如果你本身不需要那些功能,继承后,当引擎接触事件,触发的时候,就会反射调用个各种函数,这是很需要耗费资源的,不管咋样,GameObject还是要继承MonoBehaviour的,这样才能new实例化一个对象,但是其他类不要继承就行了。
如果不继承Mono会有那些坏处呢?
1:不能使用Invoke和Coroutine了。
2:调试不方便了,不能在Inspector和Debug tab看到参数。同时如果一个类不继承Mono,那么这个类的List表也无法在Debug界面看到。
3:不是自动调用Start,Update等方法。
继承Mono会有一个BUG:
如果你继承了Mono的类,你就不需要创建它的实例了,但是你不能new创建了,虽然编译可以通过,但是执行的时候就会有个一个错误显示在edit的console窗口,这时候不管你new后面有是否为空,但是系统显示为空,这就是一个BUG了,我的类继承了你,虽然不能new出来,但是怎么会是一个错误呢。
参考技术A 我认为这种说法有些牵强,不继承MonoBehavior类是指一些处理数据结构操作或者通讯类的时候不使用Unity自带的MonoBehavior机制。本人觉着继承MonoBehaviour是有很多好处的,继承MB会相对消耗一些性能,但是编码调试方便,思维顺畅,可视化,速度快。对于开发的效率上价值远远大于那一点点性能消耗。 参考技术B 没明白你说的什么意思 作为游戏组件的脚本必须继承自MonoBehaviour类。 继承自MonoBehaviour的类无法通过new关键字来进行实例化 如果你自定义的工具类这种不需要挂载到游戏对象上的类,可以不继承MonoBehaviour。 参考技术C 应该从MonoBehavior的机制来分析比较合适如果你的类无需引擎提供的各种初始化, 更新及析构, 物理, 渲染等的回调. 最好不要继承MonoBehavior继承后, 引擎会在事件触发时, 通过反射调用各种函数. 这是需要消耗性能的.当然, 如果你的类压根没挂上GameObject. 理论上说, 应该没啥卵用所以总结, 弄不继承MonoBehavior尽量不派生

以上是关于unity背包为啥要定义基类的主要内容,如果未能解决你的问题,请参考以下文章

开源web框架django知识总结

开源web框架django知识总结

selenium源码通读·2 | common/exceptions.py异常类

面向对象程序设计)

继承顺序

13 继承