引擎架构分层 大致分为五层(工具层、功能层、资源管理层、核心层、平台层)
1.工具层(也就是我们使用的时候,一些常用的各种编译器,例如Unity和UE,打开之后,里面有各种各样的界面,方便我们使用,这样可以让我们不需要的懂得里面底层原理的时候,也可以直接使用)
2. 资源层——Resource(游戏里面的各种资源,例如动画资源、地图资源、声音资源、视频资源等)
由于我们的资源文件,例如动画等,可能是在MAYA等软件中写出来的,也就是说他们的文件格式可能有很多种
如果当需要在引擎中打开的话,那么难道需要很多种存储格式吗?
答案显然不是,因为那样做的话效率会非常低,因此会有个import的导入过程,在这个过程里,会将这些资源文件转化为
引擎数据,转换完成后就变成了Assert,也就是我们所说的资产
GC这个过程很重要。打个比方,如果是一个闯关的游戏的话,当你进入下一关的时候,当前关卡的元素需要被回收,
那么当资源很大的情况下,垃圾回收的时间就会很长,就会导致游戏当前帧卡住,给玩家造成不好的游玩体验。
3.功能层——Function (也就是编写游戏里面的各种功能,例如人物的行走、受伤之类的一些逻辑等等)
单核的话tick在每一帧执行的时候,先执行逻辑层,再执行表现层。(由于时间间隔太短了,因此我们肉眼看不出差别)
如果是多核的话,可以多线程执行这个过程
4.核心层——core (内存管理、数学的运算、容器分配,为上层所有的逻辑层提供服务)
按照传统C++的分配空间来看的话,如果是vector的话,如果刚开始初始化的空间为100的话,那么当需要存储101个元素的
时候,就会需要我们进行动态扩容,按照一个游戏的开发的话,就会产生很多这样类似的问题,内存开销过大,导致浪费了
很多内存