为啥要分层?
1.太复杂了
2.为了上层开发者不必了解底层
3.底层复用,减少不必要的代码修改
工具层
最浅显的显示界面
功能层
动画、物理
资源层
3DMax、mp3、png
核心层(核心代码)
代码库支持
平台层
安卓、ios、各种设备
还有特殊层:第三方库层(物理、声音等)
例子:如果自己做个播动画的引擎怎么做呢?
1.处理资源
可能有的不同类型的资源:XML+PSD+MAX+MAYA
需要化为 Asset(资产) 转为引擎定制的资源格式
还需要生成一个 GUID(唯一识别号) 文件,处理资源的依赖(数据之间的关联)
(不能以全路径做关联,否则资源变化很麻烦)
Handle系统
核心点:管理每个资源的生命周期
2.功能层
Tick
while(true)
===>TickLogic()
===>TickRender()
表现绘制和逻辑区分开
功能层比较复杂,区分是否和游戏逻辑有关系
多线程
最初:单线程
基础多线程:Logic和Render两个线程,额外线程做加载
当前商业引擎:物理、动画等逻辑做并行运算
未来的:抽象Job概念,自动分配多核
注意逻辑有先后依赖关系,多线程需要保证不会乱
3.核心层
数学库,线性代数,矩阵向量
数学库特别敏感性能,不需要绝对准确,保证效率就行
SIMD、一条指令把四个运算全都算完,方便向量运算
数据结构,C++标准容器扩容会倍数,会有内存碎片
需要进行内存管理
优化CPU访问:数据尽可能紧凑、按顺序访问、读写尽可能一起
4.平台层
虚函数封装API,不影响上层写逻辑的人
比较难,看水平
平台渲染显卡不同、平台硬件架构不同
5.工具层
关卡编辑器、逻辑编辑器、材质编辑器、动画编辑器、UI编辑器
生产力的关键,使用体验作为关键
DCC(Digital Content Creation),兼容