程序向:
1、对于一些component,不要一上来就attach,例如:一个玩家一上来就有飞行组件、游泳组件,但是你又暂时用不到它,如果可以,不要一上来一起绑定到玩家身上然后设置变量来控制它是否启用,显得类中过于臃肿
2、清空TArray时,如果该TArray对象还会继续使用,使用Reset()
代替Empty()
,因为前者不会销毁内存空间。
3、VS2019比前版本对C++代码编译速度会提升很多
4、还有一些算法数据结构对时间复杂度的优化
5、长时间用于计算的线程,创建和销毁是一件非常耗性能的事,这个时候采用线程池,将空闲的线程继续复用
6、能不用锁就尽量不用锁,锁会导致等待的代码一直判断锁是否解开,等待的代码多了,也是一个比较大的开销
7、能用HUD解决的就不要用UMG,等到需要显示时才创建Widget对象,不显示时则销毁,UMG对象较多时性能消耗巨大。
比如场景内有一千个单位,每个单位上都创建有WidgetComponent,即使这些WidgetComponent没有显示任何东西,也会产生巨大的GPU开销,所以尽量不要有这种情况
一来就把WidgetComponent给绑定上了
使用这种方法进行创建和销毁
8、能不在tick写的东西,尽量不要在tick内写
如果实在要写在Tick里面,则把Tick的间隔调低(在没那么高帧数要求的情况下)
0代表每帧都调用,调低调成0.1等都行
9、大场景,巨量三角面需要渲染时,利用GPU进行多线程渲染
10、做适量的LOD和MipMap层数可以减少远距离观察物体贴图、模型的消耗
场景向:
1、3种光源的性能消耗从低到高:
定向光/平行光(Directional Light) < 点光源(Point Light) < 聚光灯(Spot Light)。
2、视距剔除:
3、材质性能开销对比:
Opaque < Masked < Translucent,相对于来说Opaque是性能消耗最小的
4、贴花的性能消耗取决于贴花所占像素大小,如果贴花过大,可以替换其它方案或者将贴花变小
5、如果BoxComponent不需要Overlap事件,那么将Generate Overlap Events 设置为false,当BoxCompont达到一定量级时,开启Generate Overlap Events的性能消耗是关闭情况下的两倍
6、如果不需要物理,将 Simulate Physics
设置为false。
7、如果不需要Hit事件,将 Simulation Generates Hit Events
设置为false。
8、Collision Presets越精确越好,能NoCollision就NoCollision,检测种类越少越好
9、灯光尽量调成静态光,动态光对性能消耗过大,一般人物手电筒啊什么的用动态光,其余能用静态光则用静态光