Unity游戏开发客户端性能优化基础

Unity游戏开发客户端面经——算法(初级) Unity游戏开发客户端面经之算法篇 阅读详情

前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 性能优化 常问问题总结,有帮助的可以收藏。


性能优化,主要聚焦在 内存、 CPU、GPU 三大方向上。

1. 内存

1.1 详细介绍

   Unity内存占用组成

  1. Unity(基本所有的Unity的使用的内存,Native)
  2. Mono(C#代码,可以被GC回收)
  3. GfxDriver(显卡驱动,渲染时的纹理,渲染目标,shader,Mesh(顶点、法线等)等)
  4. FMOD(声音资源)
  5. Profiler(自身,把采样的数据的缓存下来)

1.1.1 Mono方向

        (1)编程语言:字符串拼接,减少频繁扩容,合理用new,减少内存碎片的产生(将大额内存进行预处理)等一系列降低GC的操作。尽量用结构体取代类(值类型不占用堆,不需要GC)。

        (2)配置表优化:延迟加载,具体表现为:

        1.protobuf主要用于网络传输,或者将一些数据(比如聊天数据)序列化在存本地,下次启动文件再反序列化过来就可以了。

        2.一个字典存储了所有的配置表信息,key是配置表的文件id,value是一个字典存储的配置表中的配置信息,其中key是配置ID,value是行数据偏移信息(配置行的起止位置)。

        3.序列化的时候先只需要储存索引,要用到的时候按照索引再去现场序列化即可,这样可以不在游戏开始就序列化所有数据,大大的降低内存占用。

        

        C#侧优化方案-用MessagePack压缩

        MessagePack for C#(MessagePack-CSharp)是用于C#的极速MessagePack序列化程序,比MsgPack-Cli快10倍,与其他所有C#序列化程序相比,具有最好的性能。 MessagePack for C#具有内置的LZ4压缩功能,可以实现超快速序列化和二进制占用空间小。

        详细请看:MessagePack for C# - HackerVirus - 博客园MessagePack for C# 快速序列化组件MessagePack介绍 简介 MessagePack for C#(MessagePack-CSharp)是用于C#的极速MessagePackicon-default.png?t=O83Ahttps://www.cnblogs.com/Leo_wl/p/8143259.html

1.1.2 Native方向

        美术资源,模型面数,密度精度,贴图格式,限制等。

1.1.3 对象池

        管理unity对象

1.1.4 AssetBuildle

        1. 资源冗余(重复资源)

        2.避免运行时资源泄露。

  为什么会资源泄露

  1. AssetBuildle资源卸载会产生,关联资源管理器。
  2. lua 持有了unity 的对象,释放对象会产生。

2. UGUI优化—— DrawCall

UI优化核心就是一点:减低DrawCall

2.1 DrawCall介绍

        CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程。

        也可以理解为:CPU向GPU发布一条渲染指令,就是一次DrawCall的过程。简称DC。

2.2  降低DrawCall

  1. 动态合批
  2. 静态合批
  3. 降低shader的等级特性
  4. 场景优化策略——遮挡技术。
  5. rectMask2D替代Mask

2.3 合批

        一次Draw Call中批量处理多个物体。只要物体的变换和材质引用相同,GPU就可以按完全相同的方式进行处理,即可以把它们放在一个Draw Call中。

        注意:简单来说在一个Canvas下,需要相同的材质,相同的纹理以及相同的Z值。例如Ul上的字体Texture使用的是字体的图集,往往和我们自己的UI图集不一样,因此无法合批。还有UI的动态更新会影响网格的重绘,因此需要动静分离。

  2.3.1 静态合批

        将static的静态物体(永远不会移动、旋转和缩放) ,如果相同材质球,面数在一定范围之内。unity会自动合并成一个batch送往GPU处理。

     1.需要做的事情

        把要进行静态批处理的GameObject在Inspector面板右上角的Static勾选(实际上只需要勾选Batching Static即可)

     2.优点

        因为只需要进行一次,所以性能会比动态批处理要好。

     3.缺点

        使用静态合批需要额外的内存开销来存储合并后的几何数据。

        因为需要额外维护多一份数据,所以包体会变大,占用的内存也会变多(不能有超级大量的相同模型(如:森林里的树))

        无法移动

        进行了静态批处理之后的GameObject不能在游戏运行时改变位置或者是跟渲染有关的属性。并且因为把所有要静态批处理的GameObject都合并成一个大网格保存起来,所以这实际上相当于即使是同一个GameObject,也需要复制一份网格数据一起保存在这个大网格的顶点数据里面去,这样就导致了占用的内存变多了。

        静态合批就是多渲染一套合并后的网格 ,提前存在内存里,内存当然就大了。

     4.原理

        在开始阶段把需要静态批处理的GameObject进行一次网格合并操作,然后把这个合并之后的大网格保存起来,后续都是用这个网格而不需要再进行合并。

        在预处理阶段,把一些材质相同的模型的顶点统一变换到世界空间坐标下,并且新构建一个大的VB把数据保存下来,在绘制时,就会把这个大的VB提交上去,只需要设置一次渲染状态,再进行多次drawcall绘画出每个子模型。 所以Static Batching是不会减少drawcall的,但由于只修改了一次渲染状态依然可以减少CPU的消耗。而且在渲染前,也可以进行视锥体剔除,减少顶点着色器对不可见的顶点的处理次数,提交GPU的效率。

  2.3.2 动态合批(OpenGL介绍)

Unity游戏开发客户端Unity基础 Unity游戏开发客户端面经 之 Unity 篇 阅读详情

相关推荐

Unity大型游戏开发全流程指南

【代码】Unity大型游戏开发全流程指南。

2401_82978699的博客 5155

Unity 游戏开发「工业化级」学习路线 2025 版

按路线图 8 轨并行,每周投入 15-20 h,12 个月即可从“零基础”到“可独立交付商业级项目”。交付物 > 学习时长,每完成一个里程碑就更新作品集,让招聘方 / 玩家 / 投资人立刻看到你的价值。祝你在 2025 年的游戏之旅中,Bug 少、帧率高、Offer 多!

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 2326

【学习路线】游戏开发大师之路:从编程基础到独立游戏制作

游戏开发学习路线指南 本文提供从零基础到游戏开发的专业学习路径,涵盖基础认知、编程技能和引擎学习三大阶段。首先介绍游戏开发全流程和团队分工,分析不同类型游戏的技术特点。核心学习内容包括C#/C++编程基础、游戏数学(线性代数、几何算法)及常用数据结构。重点深入Unity和Unreal两大引擎,掌握物理系统、动画、UI等核心模块开发,通过实战脚本示例演示敌人AI等游戏逻辑实现。学习周期约6-8个月,适合有志成为独立开发者或加入游戏公司的学习者,提供完整的知识体系和技术实践方案。

一个普通程序员的成长记录簿 4513

游戏开发入行指南

当前的计算机行业主要有两个方向,一个为传统互联网方向,另一个为游戏方向,身为一个踏入游戏方向六年的程序员,今天带大家了解一下,游戏行业应该如何进入,如何学习相关的技术栈,并且最大程度提高自己的上限,最终达到主程甚至是CTO的技术水准。

qq_40201827的博客 2280

Unity网络多人游戏开发实战:从架构选型到性能优化

网络通信协议是构建实时交互应用的基石,它定义了数据在网络中传输的规则与格式。其核心原理在于通过TCP/UDP等协议,在客户端与服务器之间建立可靠或高效的连接,实现数据包的封装、传输与解析。掌握网络通信协议的技术价值在于能够构建低延迟、高并发的分布式系统,这对于多人在线游戏、实时协作工具等场景至关重要。在Unity游戏开发中,网络多人游戏开发是这一技术的典型应用,开发者需要解决状态同步、延迟补偿与反作弊等工程挑战。本教程聚焦Unity Netcode for GameObjects (NGO)实战,通过UDP

weixin_33922672的博客 394

【Unity 优化篇】 | 优化专栏《导航帖》,全面学习Unity优化技巧,让我们的Unity技术上升一个档次

游戏引擎 是游戏开发中最基础也是最重要的开发工具,而Unity3D则是众多引擎中的佼佼者。 成为一名优秀的游戏客户端开发者,不仅需要常年的实践积累和思考,更需要结实的基础做支撑。 也就是所谓的“基础不牢,地动山摇”。 而优化 则是老生常谈的一个话题了,在任何项目里都扮演着重要角色。 所以本系列专栏是 小Y 参考几本Unity优化书籍、网上的优质优化系列教程 以及 自身的经验整理而成。

努力前行,总会成为自己心中的那道光 8万+

Unity邮件发送功能实现与MailTool教程.zip

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于发送电子邮件的标准协议。它定义了邮件服务器之间以及邮件客户端和服务器之间的通信规则。SMTP是基于TCP/IP协议的应用层协议,运行在25号端口,负责将邮件从发件人地址传输到收件人地址。优化邮件发送性能和处理邮件发送中的异常是确保邮件系统稳定、高效运行的关键。开发者需要深入理解邮件发送流程,并利用现代编程语言和框架提供的工具来实现这一目标。

weixin_42527589的博客 1172

Unity引擎开发的MMORPG客户端项目实战

Unity引擎是全球领先的游戏开发平台,提供了一套完整的开发工具和功能,广泛应用于游戏开发、建筑可视化、影视制作以及其它交互式内容的创建。它允许开发者创建2D和3D游戏,同时支持跨平台发布,从而实现一次开发,多平台部署。Unity的核心特性包括:易用性:Unity提供了一套直观的编辑器界面,能够轻松地进行场景搭建、资源管理以及代码编写。高性能:内置的渲染引擎能够提供高品质的图形输出,同时它还支持多种硬件平台,保证在各种设备上都有良好的表现。庞大的社区和资源。

weixin_35757191的博客 852

Matlab+Matpower实战:手把手教你生成IEEE14节点FDIA攻击数据集(附完整代码)

本文提供了一份基于Matlab与Matpower工具构建IEEE14节点FDIA攻击数据集的完整实战指南。通过动态负荷数据模拟、潮流计算、状态估计及隐蔽攻击向量注入,手把手教你生成可用于电力系统网络安全研究的仿真数据集,并附有核心代码与调试技巧。

bean的博客 389

手把手教你用Logisim搞定华科计组实验:单总线CPU硬布线控制器设计(含Excel自动生成电路技巧)

本文详细解析了如何使用Logisim完成华科计组实验中的单总线CPU硬布线控制器设计,特别分享了利用Excel自动生成电路逻辑的高效技巧。从实验准备、状态机表格填写到模块化构建和系统联调,提供全流程实战指导,帮助读者快速掌握计算机组成原理核心概念,大幅提升实验效率。

weixin_28744423的博客 318

Doorbell机制在PCI与MSI中断中的高效应用

本文深入解析了Doorbell机制在PCIe设备与CPU间通信中的核心作用。作为一种高效的硬件通知机制,它通过内存映射I/O(MMIO)实现软件对硬件的轻量级触发,常与MSI中断协同工作,构建高效的生产者-消费者模型。文章以AMD GPU的Ring Buffer命令提交为例,阐述了该机制如何显著降低CPU开销、提升系统吞吐量,并对比了其与传统中断方式的性能优势。

ee345的博客 606

Python对接海康威视机器视觉工业相机

工业相机只允许单条连接,也就是说MVS如果连接了相机,python代码就无法获取数据,此时必须。相机工具类(读者直接复制)HKCamera_class.py。博主这里出现了一个警告:获取不到相机参数。四、使用Pycharm打开Python代码示例文件夹。三、找到MVS示例代码(代码在MVS的安装位置)二、解压并安装MVS客户端。一、下载MVS客户端。安装一下opencv。

Good Luck 2万+

手把手教你学AI GPU的UMD驱动软件开发专栏简介

通过本专栏的学习,您将掌握UMD的核心概念、开发环境搭建、API实现、内存管理和同步技术,以及在实际AI场景中的应用。通过本专栏的学习,您将不仅掌握UMD驱动开发的核心技术,还将能够将这些技术应用到实际的AI应用场景中,为您的AI应用提供更高效的硬件加速支持。无论您是想开发自己的AI加速框架,还是希望深入理解现有AI加速库的工作原理,本专栏都将为您提供宝贵的知识和实践经验。:本专栏不仅讲解UMD驱动的核心概念,还通过精心设计的实战案例,引导您从零开始构建UMD驱动,真正掌握AI GPU驱动开发的技能。

MHD0815的博客 106

Qt图形几何之QRect详解:从基础操作到高级功能全解析

本文全面介绍了Qt框架中的QRect类,详细解析了其核心功能和使用方法。主要内容包括:1)QRect的基本概念与多种构造函数;2)矩形属性获取和状态判断方法;3)几何操作函数(移动、调整大小等);4)几何关系判断(包含、相交等);5)坐标变换和边距处理;6)实用功能与QRectF转换;7)综合应用示例(图形界面、碰撞检测、布局管理);8)性能优化建议和常见陷阱。通过丰富的代码示例,展示了QRect在Qt图形编程中的实际应用,帮助开发者掌握矩形处理的各项操作技巧,提升图形界面开发效率。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 109

【RT-DETR涨点改进】小目标检测、特征融合改进篇 | TGRS 2024 | RT-DETR引入CSFM上下文选择融合模块,适合多模态检测、红外小目标检测、小目标检测、遥感目标检测等任务有效涨点

本文提出了一种改进RT-DETR目标检测模型的方法,通过引入上下文选择融合模块(CSFM)显著提升复杂背景下小目标和低对比度目标的检测精度。CSFM模块采用多尺度特征融合和动态特征选择机制,有效增强模型的全局上下文感知能力,同时保留细节特征。该模块通过通道减少机制和空间信息调节,实现从粗到细的特征聚合,减少误报并提高轮廓检测精度。实验表明,改进后的RT-DETR模型在多个基准测试中表现优异,计算效率与检测精度均优于现有方法。文章还详细介绍了模块配置和yaml文件修改方法,为模型部署提供指导。

Ai缝合怪、助力小伙伴高效发论文 1715

SAP Fiori Launchpad 自定义层文本翻译实战:精准修正 Tile、Catalog 与 Group 标题

SAP Fiori 项目中,入口层(tile/catalog/group)的翻译问题常被忽视,但其直接影响用户体验。与前端i18n不同,这些文本属于平台配置数据,需通过ABAP标准翻译流程(SE63)处理。关键步骤包括:使用/UI2/FLC定位Text ID和Configuration ID,根据前缀区分Main/Property WD Config Key,在SE63中锁定WDY_CONF_USERT2表对象进行翻译。操作时需注意使用系统源语言环境,翻译完成后可能需要清理缓存。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 167

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: Unity游戏开发客户端Unity基础
下一篇: Unity游戏开发客户端面经——热更新(初级)
Game_小志
博客等级 码龄6年 4565粉丝 26原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值