【Unity面经】性能优化篇

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 专栏交流🧧
🟥Unity100个实战基础✨🎁
🟦 Unity100个精华一记✨🎁
🟩 Unity50个demo案例教程✨🎁
🟨 Unity100个精华细节BUG✨🎁
🟨 Unity100个面试题✨🎁

在这里插入图片描述

在这里插入图片描述


文章目录

    • 前言
    • 🎶(==一==) 有使用过Unity性能工具吗
    • 🎶(==二==) 有哪些减少性能消耗的方法和手段
      • 🪶1.检测和早期手段
      • 🪶2. 内存优化
      • 🪶3. 物理引擎的优化
      • 🪶4. 优化脚本(需深入)
      • 🪶5. 管理内存和包体优化
      • 🪶6. 渲染优化
      • 🪶7. 美术方面的优化
      • 🪶8.网洛优化
    • 🅰️系统路线学习点击跳转


前言


🎶( 有使用过Unity性能工具吗


Unity Profiler可以帮助我们监测游戏在运行时的性能表现,包括CPU、GPU的占用情况,内存分配情况、渲染性能及网络活动等。

性能优化”最重要的方式,是从”项目管理”上防止”游戏做完马上要上线”时出现的性能问题。在日常项目管理中,把性能监控起来,问题尽早发现,尽早动态清零,这样才能做到项目从性能风险上是可控的

从项目正式开发的第一天起就引入多平台测试与完整的测试机制;

如做渲染管线定制,编写了Shader,效果,还要注意必须要最快的速度尽早多平台测试。在项目开始就上多平台,才能发现各个平台不同的差异,尽快解决这些差异与问题。同时还要构建游戏核心玩法中的极限情况模拟,来应对项目后期大量战斗单元出现导致的性能问题。

使用Unity Profiler性能工具检测性能参数的变化

做好性能优化的最重要的手段

完整的工程管理机制
与测试共存,
动态清零包含性能在内的问题,是


🎶( 有哪些减少性能消耗的方法和手段


🪶1.检测和早期手段


a:代码算法与系统底层功底
b:工程管理手段: 通过工程手段测试出来了性能问题
c: 打印:
d: 性能工具剖析手段:


🪶2. 内存优化


1.使用对象池缓存池,减少内存碎片,减少对象的反复构建,避免GC峰值冲击等
原理:频繁创建和销毁对象会导致性能问题,尤其是在游戏中经常需要创建和销毁大量对象时。

举例:在射击游戏中,使用对象池来重用子弹对象。创建一个BulletPool类,在游戏开始时预生成一定数量的子弹对象,当子弹被射出时从池中取出一个对象,当子弹消失时将其返回池中而不是销毁它。

2.共享池(享元模式):整个游戏全部角色共享同一个对象
3.确保及时清理不再使用的对象避免重复加载相同的资源:
4.重用缓存资源:使用 Resources.Load() 时,避免重复加载相同的资源,应该缓存资源的引用并重用它们。

5.使用 Asset Bundles 或 Addressables:管理和优化资源的加载和卸载。

6.合理使用 Dispose 方法

7.释放非托管资源:对于实现了 IDisposable 接口的对象,如文件流、网络连接等,确保正确调用 Dispose 方法来释放资源。


🪶3. 物理引擎的优化


减少物理引擎的迭代参数,减少计算量,减少物理刚体的数目。简化碰撞体

原理:复杂的碰撞体会增加物理计算的负担,简化碰撞体可以显著提升性能。

使用简单的碰撞体:对于一个大型建筑物模型,使用一个简单的盒子碰撞体来代表它,而不是使用复杂的Mesh Collider。复杂的Mesh Collider适用于需要精确碰撞检测的对象,例如角色模型的碰撞体。

减少物理计算
原则:减少不必要的物理计算可以降低CPU的负担。

举例:调整物理模拟精度:对于不需要高精度物理模拟的对象,调整物理引擎的精度设置,例如,增加Fixed Timestep值以减少物理计算的频率。
使用简单碰撞体:在需要物理计算的对象上使用简单的碰撞体,而不是复杂的Mesh Collider。
这些原则和例子可以帮助你在面试中展示你对Unity性能优化的深入理解。通过具体的实例说明每个原则的应用,将展示你在实际开发中的实践经验和能力。


🪶4. 优化脚本(需深入)


原理:优化脚本可以减少CPU负担,尤其是对性能敏感的游戏。

举例:

减少Update调用:在Update方法中避免执行昂贵的操作。如果一个操作不需要每帧更新,可以放到FixedUpdate()或者LateUpdate()中,或者使用事件和定时器来触发。

缓存引用:在Update中频繁访问GameObject.Find()会导致性能问题。将对象的引用缓存到变量中,避免重复调用。
for循环内部不要过多

减少频繁的 Find 操作

缓存引用:避免在每帧调用 GameObject.Find(),在初始化时缓存对游戏对象的引用。

寻路导航优化: 优化寻路算法,流场寻路等,多线程。


🪶5. 管理内存和包体优化

优化图片,声音体积,通过改变压缩参数来降低这些资源的体积大小。可以使用服务器上部署资源包来实现打空包机制进一步减少包体体积。

原理:有效管理内存可以避免内存泄漏和频繁的垃圾回收,从而提高应用的性能。

举例:

避免频繁的内存分配:在游戏中频繁创建和销毁大量临时对象会导致频繁的垃圾回收。使用对象池或预分配内存来减少垃圾回收的次数。
使用Profiler工具:通过Unity的Profiler工具监控内存使用情况,识别内存泄漏和不必要的内存开销。


🪶6. 渲染优化


利用光照贴图:使用光照贴图可以减少实时光照计算的需求,特别是对静态对象。

举例:烘焙光照:在场景中使用光照贴图(Lightmaps)对静态环境进行光照烘焙,例如,房间的墙壁和地板,避免实时计算这些物体的光照。

看下pass的次数与set pass 次数, pass 次数
多次pass:阴影会导致,多光源会导致, 可以通过定制渲染管线,优化shader代码, 优化光照计算等,从Shader+渲染管线级别来做好渲染优化。LOD优化,远处用的面数少,近处用的面数多。抗锯齿算法优化等。

Draw Calls优化:

原理:每次渲染调用都需要CPU和GPU的协作,减少Draw Calls可以显著提高渲染性能。

举例
纹理图集合并:如果你的游戏有多个UI元素,每个元素都有不同的纹理,可以将这些纹理合并到一个大纹理图集中。这样可以减少纹理切换,从而减少Draw Calls。
网格合并:例如,你有一个场景中有多个相似的树木模型。通过将这些树木的网格合并成一个大网格,并在Shader中进行批处理,减少每帧的Draw Calls数量。

压缩纹理

原理:压缩纹理可以减少纹理占用的内存和带宽,提高渲染效率。

举例:
使用纹理压缩格式:将纹理设置为压缩格式,如DXT(对于PC)或ASTC(对于移动设备)。这可以显著减少纹理占用的内存和带宽,尤其是在大型场景中。

降低分辨率

原理:降低渲染分辨率可以减少图像处理的负担,提升帧率。

举例
动态分辨率调整:根据游戏性能动态调整分辨率。如果游戏帧率下降,可以降低渲染分辨率以提高性能。

合理使用光源

原理:减少实时光源的数量,优化光源的使用可以显著提升渲染性能。

举例:
减少动态光源数量:在一个场景中,尽量减少动态光源的数量。例如,将场景中的某些光源设置为静态光源,并使用光照贴图代替实时光源。

剔除未显示物体

原理:通过剔除看不到的物体来减少渲染负担。

举例:
视锥体剔除:Unity自动进行视锥体剔除,确保只有在摄像机视野内的物体才会被渲染。你可以手动优化剔除逻辑,例如,使用OnBecameInvisible方法来进一步管理物体的激活状态。
遮挡剔除:使用遮挡剔除(Occlusion Culling)功能来避免渲染被其他物体遮挡的物体。这有助于减少不必要的渲染开销。


🪶7. 美术方面的优化


优化动画:优化动画可以减少CPU和GPU的负担,提升游戏性能。

举例
动画压缩:在Animator中,使用动画压缩功能来减少动画数据的大小。对于角色动画,可以调整动画的压缩设置,以在不显著影响质量的前提下减少数据量。
动画剪裁:对于不需要精细动画的场景,使用简单的动画剪裁和循环动画来减少对性能的要求。

模型优化:通过细节增强,法线贴图,高度贴图,凹凸纹理等减少模型面试的同时获得很好的效果。

🪶8.网洛优化


网络优化: 异步IO代替同步IO,多线程处理网络消息, protobuf序列化与反序列化优化网络包体体积。KCP 替换传统的TCP。

减少网络数据包大小

示例:仅发送必要的数据,避免发送冗余信息,优化网络数据格式和压缩策略。

减少网络通信频率:

示例:避免频繁的状态更新,通过批量更新或使用事件驱动的方式减少网络通信的次数。

通过遵循这些基本的性能优化原则,开发者可以显著提升 Unity 游戏的性能,并提供更流畅的用户体验。

代码写法优化: for循环内部不要过多、、
跳转打乱CPU Cache等。……

在这里插入图片描述

🅰️系统路线学习点击跳转


👨‍💻 Unity程序基础学习路线🧧
⭐【Unityc#专题篇】之c#进阶篇】🎁
⭐【Unityc#专题篇】之c#核心篇】🎁
⭐【Unityc#专题篇】之c#基础篇】🎁
⭐【Unity-c#专题篇】之c#入门篇】🎁
【Unityc#专题篇】—进阶章题单实践练习🎁
⭐【Unityc#专题篇】—基础章题单实践练习🎁
【Unityc#专题篇】—核心章题单实践练习🎁

你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/874534.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot开发——整合Logbook进行HTTP API请求响应日志输出

文章目录 1. 简介依赖管理2. 实战案例2.1 基本用法2.2 结合Logback日志记录到文件2.3 自定义核心类Logbook2.4 自定义日志输出Sink2.5 与RestTemplate集成1. 简介 记录HTTP API请求响应日志对于监控、调试和性能优化至关重要。它帮助开发者追踪API的使用情况,包括请求来源、参…

2010-2022年各省乡村振兴新质生产力相关变量数据(40+指标)

2010-2022年各省乡村振兴新质生产力相关变量数据(40指标) 1、时间:2010-2022年 2、来源:统计年鉴、能源统计年鉴、农村统计年鉴、人口和就业统计年鉴、城乡建设统计年鉴以及各省份统计年鉴 3、指标:省份、年份、分地…

洗袜子的小洗衣机哪款好?专洗袜子的微型洗衣机!洗衣机不要乱选

袜子洗衣机大多数都为迷你洗衣机,因为这是解决了用大洗衣机去洗袜子而大材小用的情况,同时袜子清洗的数量比较少(满打满算一周的袜子5双,用迷你洗衣机清洗是绰绰有余的)而现在也很多人为了洗袜子专门买一个迷你洗衣机&…

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内…

【Hadoop|MapReduce篇】MapReduce概述

1. MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2. Map…

丹尼尔·T·琼斯:为什么精益管理是卓越的商业模式?

作者:丹尼尔T琼斯 原文:Why Lean Remains a Superior Business Model and Way of Thinking - Lean Enterprise Institute 精益商业模式提供了一种不同于传统思维的选择,帮助企业在满足客户需求方面超越竞争对手,从而获得竞争优势…

安卓玩机工具-----ADB方式的刷机玩机工具“秋之盒”’ 测试各项功能预览

秋之盒 安卓玩机工具-秋之盒是一款ADB刷机工具箱,基于谷歌ADB的一款绿色安装,具备了海量扩展模块,支持ADB刷机救砖、一键激活黑域、adb指令修复等功能,是一款开源、免费、易用的手机刷机工具! 并且是一款开源、免费、易用的图形化…

【每日刷题】Day118

【每日刷题】Day118 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 123. 买卖股票的最佳时机 III - 力扣(LeetCode) 2. 188. 买卖股票的最佳时…

Ai+若依(集成easyexcel实现excel表格增强)

EasyExcel 介绍 官方地址:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一…

运维问题0002:SAP多模块问题-SAP系统程序在执行时,跳出“加急快件”窗口,提示:快件文档“更新已终止”从作者***收到

1、问题描述 近期收到2起业务报障,均反馈在SAP执行程序时,弹出“加急快件”窗口,导致操作的业务实际没有更新完成。 1)业务场景一:设备管理部门在操作事务代码:AS02进行资产信息变更时,保存正常…

当代打工人学会AI绘画之后,到底可以做什么?

Lofi Girl,一个油管拥有1,400万粉丝的虚拟博主,她的直播视频一般是柔和的背景音乐加上简单的循环动画,这样一个陪着你一起学习的虚拟女孩卡通频道,已经成为了全球无数网友的“精神伴侣”。 但你可能想象不到,就这样的一…

大模型算法岗,面试百问百答,7天3个offer拿到手!

导读 大模型时代很多企业都在开发自己的大模型,这直接刺激了大模型岗位的需求。本文为大家整理了大模型面试相关的知识点,希望对大家面试求职有所帮助。 今天分享大模型面试相关知识点,持续更新。 1. RAG技术体系的总体思路 数据预处理->…

Tube Qualify三维弯管测量系统用于弯管机修正弯管回弹参数

无论是汽车管路,还是航空管路,在采用弯管机弯曲成型时,金属材料受力变形,弯曲成品。当外力撤消后,管路会受到应力回弹,实测管路弯曲角度比所需弯曲的角度小。 弯曲不同的材料、不同的直径、不同的弯曲半径…

开源网安斩获CCIA中国网络安全创新创业大赛总决赛三等奖

近日,由中央网信办指导,中国网络安全产业联盟(CCIA)主办的2024年中国网络安全创新创业大赛总决赛及颁奖典礼在国家网络安全宣传周落下帷幕。开源网安“AI代码审核平台CodeSec V4.0” 凭借在AI方向的技术创新、技术突破及功能应用创…

嵌入式系统------ARM

目录 一.c语言回顾 1.特殊符号 (1)const (2)static (3)extern 2.内存的结构 (1)kernel:内核 (2)栈区 (3)堆区 &#xff08…

名城优企游学活动之走进万事利:巴黎奥运文创合作伙伴数字化之路

近日,由纷享销客主办的“数字中国 高效增长——名城优企游学系列活动之走进万事利”成功举办,此次活动众多业内精英齐聚万事利科创中心,领略万事利的数字化转型之道,共同探讨如何运用先进数字化手段,实现企业的持续增长…

Java 入门指南:Java 并发编程 —— 同步工具类 Semephore(信号量)

文章目录 同步工具类Semephore核心功能限制并发访问量公平与非公平策略灵活性与适应性 常用方法使用示例 同步工具类 JUC(Java.util.concurrent)是 Java 提供的用于并发编程的工具类库,其中包含了一些通信工具类,用于在多个线程之…

游戏开发| Unreal5.2-5.4接入chatGPT定制游戏NPC

引擎版本UE5.2 (也支持到5.4,有试用其它插件所以选择之前版本) 使用插件(免费) 1.VArest (插件官方介绍:Plugin that makes REST communications much easier.)可以让REST(Representational State Transfer)通信变得更加容易,涉及客户端与服务器之间通过 HTTP 协议…

万亿低空经济火爆,无人机飞手培训正当时

低空经济是一种新兴的经济形态,主要依托于低空空域(通常指垂直高度1000米以下,根据不同地区特点和实际需要可延伸至3000米以内的空域)进行各种有人驾驶和无人驾驶航空器的飞行活动。 一、低空经济的蓬勃发展 近年来,…

料品档案没有配置主供应商信息

这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示,也让人摸不着头脑。只能是记下来备用吧。