软件架构 项目中的每个子系统都有自己的方向,把子系统的决策方向合起来再加入它们之间的关联调用就构成了一个完整的架构,即每个系统、模块、组件都是软件系统架构中的一部分。 架构图 在架构设计中,为了能够更好的整理,思考,描述,表达我们的想法;为了让自己和大家能够更加系统的认识架构的意图,结构以及各个子系统。 架构图不关心实现的细节,只关心整体的解决方案。架构图要做到从宏观...
Unity Job System
官方文档 blit 和 blittable type 是什么? blit 是位块传送的意思。内存拷贝操作(memory copy operation)有时候被称作位块传送(block transfer),简称为 bit blit。专用于 block transfer 的硬件被称作位块传送器(blitter)。 能够使用 block transfer 的类型在C#中被称作 bl...
Unitask
UniTask/README_CN.md UniTask v2 — Zero Allocation async/await for Unity, with Asynchronous LINQ UniTask 为Unity提供一个高性能,0 GC 的 async/await 异步方案。 基于值类型的 UniTask<T> 和自定义的 AsyncMethodBuild...
行为树
参考资料 Behavior trees for AI: How they work 好用的行为树插件 Behavior Designer NodeCanvas Fluid Behavior Tree - GitHub - 代码驱动行为树 行为树的基本概念 行为树采用策略型思考方式编写。 行为树的本质是树状节点,是一种树形的父子节点之间的逻辑结构,...
Unity Ugui 事件系统分析
Event System Event System 组件本身仅仅作为整个事件系统的管理器,或者不同事件系统组件的辅助器。 如果不需要处理玩家的输入事件,可以把 Event System 删掉。 Event System 并非uGUI专用的,也可以用于其他用途。 工作流程:Unity输入系统检测到用户输入,Input Modules 处理用户输入,从摄像机的屏幕位置上通...
渲染优化 静态合批
静态合批 静态合批在离线状态下生成合并的网格,并以文件的形式存储合并之后的数据。当场景被加载时,这些合并的网格数据一并被加载到内存中,渲染时提交给GPU。静态合批会在项目中生成一个较大的VBO(Vertex Buffer Object)和IBO(Index Buffer Object),Runtime时会通过该VBO进行渲染。 本质上是用内存+带宽换取CPU和GPU的效率提升。...
渲染优化 手动合批
手动合批方法 生成新的合批后的模型后要隐藏原有的模型,以免两个模型重叠显示。 // CombineInstances 承载了所有需要合并的数据,包括网格,子网格,世界坐标矩阵等... CombineInstance[] combineInstances = new CombineInstance[meshFiltersToCombine.Count]; for(int i = ...
渲染优化 动态批处理
Dynamic Batch的尴尬之处: 减少DrawCall是为了减少CPU消耗,而合批计算又需要消耗CPU,关键这玩意还要每帧都重新计算,不如手动合批! 动态合批 在CPU中把小网格合并成一个大网格,打组一起送到GPU,并在一个draw Call中渲染它们。 开启动态合批时,Unity每帧通过遍历所有的渲染模型,检测视锥体内的非动画模型,筛选符合条件的模型进行合批操作,将他们...
渲染优化 Srp Batcher
SRP Batcher 原理 SRP Batcher并没有减少 [[DrawCall]] 的数量,只是效率更高,优化了每一次Drawcall的耗时。 合批条件 只需要Shader变体相同,不需要材质相同。 渲染的物体必须是一个 [[Mesh]] 或者 [[SkinnedMesh]]。不能是粒子。 [[Shader]] 代码必须兼容 SRP Batcher。 ...
渲染优化 Gpu Instancing
Graphics.DrawMeshInstanced GPU Instancing是什么? GPUInstancing是一种GPU优化手段,可以让CPU用一个 DrawCall 命令控制GPU绘制某个网格的大量实例,这些网格使用相同的material。 GPU Instancing 是显卡的一个特性,大部分图形API都能提供的一种技术,其表象为当我们绘制1000个物体时,...